JZOJ Day 4 普及模擬 遊戲

2021-08-03 14:29:43 字數 1469 閱讀 6092

題目描述

guyu guo和tube lu正在玩乙個遊戲:lu默想乙個1和n 之間的數x,然後guo嘗試猜出這個數。

guo能提出m個這樣的問題: 「未知數是否能被yi整除?」

遊戲按照如下流程進行:guo先給出他想問的全部m個問題,然後lu對所有問題依次以「是」或「否」作答。得到m個問題的答案之後,guo就要給出他

的猜測。

guo寫了乙個程式幫他以最優的方式提出這m個問題,現在他想知道在保證得到乙個確定的答案下,最少可以問多少個問題,即m的最小值。

但是guo正忙於吃漂亮學姐送他的糖果而無暇改**(送糖果的學姐十分多,以至於有許多糖果快要過期了),所以他找到了你,希望你來幫他

解決這個問題。

輸入一行,乙個整數n

輸出 一行,乙個整數m

樣例輸入

【樣例輸入1】

4【樣例輸入2】

8

樣例輸出

【樣例輸出1】

3【樣例輸出2】

6樣例1解釋:

guo依次提問能否被2,3,4整除,就可以得到確定答案。

比如lu回答能被2,4整除,不能被3整除,則確定答案為4

樣例2解釋:

guo依次提問能否被2,3,4,5,7,8整除,總共需要6次。

資料範圍限制

對於20%的資料:1 ≤ n ≤ 20

對於60%的資料:1 ≤ n ≤ 1000

對於100%的資料: 1 ≤ n ≤ 100000

分析這題其實就是求質數的冪次方。

程式:

var

n,ans,i,j:longint;

w:int64;

f:array[0..100000]of boolean;

begin

assign(input,'game.in');

reset(input);

assign(output,'game.out');

rewrite(output);

readln(n);

fillchar(f,sizeof(f),false);

f[1]:=true;

ans:=0;

for i:=2

to n do

if f[i]=false then

for j:=2

to n div i do

f[i*j]:=true;

for i:=2

to n do

if f[i]=false then

begin

w:=i;

while w<=n do

begin

inc(ans);

w:=w*i;

end;

end;

write(ans);

close(input);

close(output);

end.

JZOJ Day 2 普及模擬 串

題目描述 給定乙個0 1串,請找到乙個盡可能長的子串,其中包含的0與1的個數相等。輸入乙個字串,只包含01,長度不超過1000000。輸出 一行乙個整數,最長的0與1的個數相等的子串的長度。樣例輸入 1011 樣例輸出 2 資料範圍限制 30 的資料 串的長度 20 程式 var s ansistr...

JZOJ Day 1 普及模擬 PLES

題目描述 在舞會上有n個男孩和n個女孩,每個人都量過了自己的身高。每個男孩只跟女孩跳舞,並且女孩也只跟男孩跳舞。每個人最 多只有乙個舞伴。男孩或者想和比自己高的女孩跳舞,或者想和比自己低的女孩跳舞,同樣的,女孩也是或者想和比自己高的男 孩跳舞,或者想和自己低的男孩跳舞。你能決定最多有多少對能在一起跳...

JZOJ Day 5 普及模擬 num

題目描述 kc邀請他的兩個小弟k和c玩起了數字遊戲。遊戲是k和c輪流操作進行的,k為先手。kc會先給定乙個數字q,每次操作玩家必須寫出當前數字的乙個因數來代替當前數字,但是這個因數不能是1和它本身。例如當前數字為6,那麼可以用2,3來代替,但是1和6就不行。現在規定第乙個沒有數字可以寫出的玩家為勝者...