2017 6 4 入門組 NO 1 k好數

2021-08-02 04:24:07 字數 1008 閱讀 9243

方法①

資料1<=n<=1000000,時間複雜度最大o(1000000*6)

暴力足夠了,於是,便開始碼暴力:

迴圈列舉i,將i轉為字串,每一位的判斷是否超過k:如果每一位都沒超過就+1

方法②動態規劃

找一找每一位於上一位的關係,可以發現。

設n=236,k=5,如果最後一位的數x大於k,則上一位數,只能取3+1種,所以(k+1)*f[i-1]

設n=234,k=5,如果最後一位x小於或等於k,則上一位數,能取x種,所以g+x*k

方法①**:

var  n,k,i,j,o,l:longint;

s:string;

begin

readln(n,k);

for i:=1

to n do

begin

str(i,s);

o:=0;

for j:=1

to length(s) do

if ord(s[j])-48>k then

begin

o:=1; break;

end;

if o=0

then inc(l);

end;

write(l);

end.

方法②**:

var n,k,x,g,f:int64;

begin

readln(n,k);

f:=1;

g:=1;

while n>0

dobegin

x:=n mod

10; n:=n div

10; if x>k then g:=f*(k+1)

else g:=g+f*x;

f:=f*(k+1);

end;

write(g-1);

end.

2017 6 4 入門組 NO 6 樹

80 做不出100 先來個80分水法 首先將x,y之間有邊的記錄兩個,存在a陣列裡,乙個是x,y,另乙個是y,x 然後將這個a陣列排序,將a i,1 按公升序排序。then 就可以求出每乙個點與多少個點有邊,求出每乙個點的 子點 的區間,用l和r陣列存 再用dfs求出以1作根,每乙個點的father...

2017 6 4 入門組 NO 4 猜數

這題就是求乙個區間 l.r 那開始將l 10000 r 10000 每次輸入一次判斷,如果為 n 那麼就將符號反轉,如 那麼符號處理好後,如果為 或 那麼如果當x大於l且小於或等於r,則l x 如果當x大於r,則輸出 impossible 如果為 如果當x小於l,則輸出 impossible tip...

NOI Online 1 入門組 魔法

全網都是矩陣快速冪,我只會倍增dp 其實這題與 acwing 345.牛站 還是比較像的,那題可以矩陣快速冪 倍增,這題也行。先 floyd 預處理兩點之間不用魔法最短距離 d 複雜度 o n 3 然後預處理兩點之間至多用乙個魔法的最短距離 w 初始為 w d 列舉 i,j 和一條邊 u,v,t w...