CodeM資格賽E 數碼 題解

2021-08-02 22:02:35 字數 1051 閱讀 1907

題意

給定兩個整數 l 和 r ,對於所有滿足1 ≤ l ≤ x ≤ r ≤ 10^9 的 x ,把 x 的所有約數全部寫下來。對於每個寫下來的數,只保留最高位的那個數碼。求1~9每個數碼出現的次數。

思路首先我們只需要能求出從1到x的答案,然後減就好了,對於不超過x√

的數,就要在這個的最高位的計數上加x/

x√,並記錄下x/

x√,放到棧中,對於超過x√

的數,就會有一段數作為約數出現在1到x中的次數都相等,而這個界線就是之前存在棧裡的那些數,此時我們需要做的是能夠求出1到y中對每個數取最高位那麼1到9出現的次數,然後相減即可,經過這兩步就可以得到題目要的結果

**

#include 

#include

#include

using

namespace

std;

long

long ans1[10],ans2[10],ad1[10],ad2[10];

long

long hdigit(long

long x)

void calc2(long

long x,long

long *d)

temp=1;

for(long

long i=0;i1;i++)

for(long

long i=1;i1;

return;

}void calc(long

long x,long

long* d)

while(!st.empty())

if(st.empty())

break;

calc2(st.top(),ad1);

calc2(e,ad2);

//printf("e:%lld sttop:%lld\n",e,st.top());

for(long

long i=1;i<=9;i++)

e=st.top();

}return;

}int main()

美團 CodeM 資格賽 數碼 詳解

time limit 1 sec memory limit 256 mb description 給定兩個整數 l 和 r,對於任意 x,滿足l x r 把 x 的所有約數全部寫下來。對於每個寫下來的數,只保留最高位的那個數碼。求 1,9 中每個數碼出現的次數。輸入格式 輸入一行兩個整數 l 和 r...

CodeM資格賽D 送外賣 題解

題意 n 個小區排成一列,編號為從 0 到 n 1 一開始,美團外賣員在第0號小區,目標為位於第 n 1 個小區的配送站。給定兩個整數數列 a 0 a n 1 和 b 0 b n 1 在每個小區 i 裡你有兩種選擇 1 選擇a 向前 a i 個小區。2 選擇b 向前 b i 個小區。把每步的選擇寫成...

2018 CodeM 資格賽 下單

這道題目應該算簽到題了吧 我大概掃了一下,感覺這道題目應該是最簡單的 注 如果您現在還沒有ac,並且比賽還沒有結束,我建議再想想,認真再重新讀下題目描述,或許你就會發現原來是自己想複雜了 不管你是不是這樣的情形,反正我當時是這樣的,哈哈 程式設計 1000分 下單 時間限制 c c 1秒,其他語言 ...