清北考前刷題day1早安

2022-04-06 02:10:15 字數 3730 閱讀 9398

立方數(cubic)

time limit:1000ms   memory limit:128mb

題目描述

lyk定義了乙個數叫「立方數」,若乙個數可以被寫作是乙個正整數的3次方,則這個數就是立方數,例如1,8,27就是最小的3個立方數。

現在給定乙個數p,lyk想要知道這個數是不是立方數。

當然你有可能隨機輸出一些莫名其妙的東西來騙分,因此lyk有t次詢問~

輸入格式(cubic.in)

第一行乙個數t,表示有t組資料。

接下來t行,每行乙個數p。

輸出格式(cubic.out)

輸出t行,對於每個數如果是立方數,輸出「yes」,否則輸出「no」。

輸入樣例38

2728

輸出樣例

yesyes

no資料範圍

對於30%的資料p<=100。

對於60%的資料p<=10^6。

對於100%的資料p<=10^18,t<=100。

#include#include

#include

#define ll long long

#define k 1000001

using

namespace

std;

ll t,n,x,ans,cnt;

inline ll read()

while(c>='

0'&&c<='9')

return x*f;

}int

main()

}if(!flag)

}return0;

}

立方數2(cubicp)

time limit:1000ms   memory limit:128mb

題目描述

lyk定義了乙個數叫「立方數」,若乙個數可以被寫作是乙個正整數的3次方,則這個數就是立方數,例如1,8,27就是最小的3個立方數。

lyk還定義了乙個數叫「立方差數」,若乙個數可以被寫作是兩個立方數的差,則這個數就是「立方差數」,例如7(8-1),26(27-1),19(27-8)都是立方差數。

現在給定乙個數p,lyk想要知道這個數是不是立方差數。

當然你有可能隨機輸出一些莫名其妙的東西,因此lyk有t次詢問~

這個問題可能太難了…… 因此lyk規定p是個質數!

輸入格式(cubicp.in)

第一行乙個數t,表示有t組資料。

接下來t行,每行乙個數p。

輸出格式(cubicp.out)

輸出t行,對於每個數如果是立方差數,輸出「yes」,否則輸出「no」。

輸入樣例52

35711

輸出樣例

nono

noyes

no資料範圍

對於30%的資料p<=100。

對於60%的資料p<=10^6。

對於100%的資料p<=10^12,t<=100。

/*

x^3-y^3=(x-y)(x^2+xy+y^2)

p是素數 ->(x-y)=1; y=x-1

x^2+x(x-1)+(x-1)^2=p

若p不是素數可以列舉p的因數d,就是列舉(x-y)。把(x-1)改為x-d。

*/#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

intmain()

if (3ll*i*i+3*i+1>p) break

; }

if(flag) printf("

yes\n");

else printf("

no\n");

}return0;

}

猜數字(number)

time limit:1000ms   memory limit:128mb

題目描述

lyk在玩猜數字遊戲。

總共有n個互不相同的正整數,lyk每次猜一段區間的最小值。形如[li,ri]這段區間的數字的最小值一定等於xi。

我們總能構造出一種方案使得lyk滿意。直到…… lyk自己猜的就是矛盾的!

例如lyk猜[1,3]的最小值是2,[1,4]的最小值是3,這顯然就是矛盾的。

你需要告訴lyk,它第幾次猜數字開始就已經矛盾了。

輸入格式(number.in)

第一行兩個數n和t,表示有n個數字,lyk猜了t次。

接下來t行,每行三個數分別表示li,ri和xi。

輸出格式(number.out)

輸出乙個數表示第幾次開始出現矛盾,如果一直沒出現矛盾輸出t+1。

輸入樣例

20 4

1 10 7

5 19 7

3 12 8

1 20 1

輸出樣例

3資料範圍

對於50%的資料n<=8,t<=10。

對於80%的資料n<=1000,t<=1000。

對於100%的資料1<=n,t<=1000000,1<=li<=ri<=n,1<=xi<=n(但並不保證一開始的所有數都是1~n的)。

hint

建議使用讀入優化

inline int read()

/*

二分答案 出現矛盾的時間

判定性按xi從大到小排序後,在[l,r]內,若之前以被覆蓋過,則矛盾。

要求互不相同,若[1,10]->7 [5,19]->7 則說明[5,10]->7,[1,4]和[11,19]最小值大於7;

所以可以合併xi相同的區間,區間交。

從大到小列舉xi判斷是否有大於xi的區間並覆蓋了這個區間。

可用線段樹

查詢:區間最小值是否為0

修改:區間改為1,不是修改區間的交,而是最小值為xi的區間並。

o(nlgn^2n);

正解並查集

f[i]表示以i開始最近的沒被覆蓋過的位置是哪個。

若[1,6]->7 則f[1]...f[6]=7

for(int i=f[1];i<=r;i=f[i+1])

f[l]是否》r

*/#include

#include

#include

#include

#define n 1000007

using

namespace

std;

intn,q,ans;

int f[n];//

f[i]表示以i開始最近的沒被覆蓋過的位置是哪個。

struct

nodep[n],t[n];

inline

intread()

while(c>='

0'&&c<='9')

return x*f;

}bool cmp(node x,node y)

inline

int find(int x)

inline

bool check(int

k)

else

}if(find(lmax)>rmin) return1;

return0;

}int

main()

printf(

"%d\n

",ans);

return0;

}

清北合肥day1

題目 1.給出乙個由0,1組成的環 求最少多少次交換 任意兩個位置 使得0,1靠在一起 n 1000 2.兩個數列,支援在第乙個數列上區間 1,1 每次花費為1 求a變成b的最小代價 n 1e5 3.有n首歌,每首歌每秒有p i 的機率被破譯 當大於等於t時自動破譯 求期望破譯歌數 題解 t1t2都...

CSP S2考前綜合強化刷題 Day1

阿克掛 240 dk 有 n nn 張牌,奇數屬於第乙個人,偶數屬於第二個人,兩個人輪流按撲克規則進行遊戲。指定乙個先手,求誰能獲勝。以後看見這些簡單的找規律題,一定要從下邊界開始乙個個手玩,不然爆零兩行淚。n 2 n 2 n 2 時顯然誰先手誰獲勝,這是乙個特殊情況,下面預設 n 2n 2 n 2...

Day1刷題總結

如果進棧序列為e1,e2,e3,e4,則不可能的出棧序列是 d a.e2,e4,e3,e1 b.e4,e3,e2,e1 c.e1,e2,e3,e4 d.e3,e1,e4,e2 解析 對於a,進棧的順序是先把e1,e2進棧,再把e2出棧,再將e3,e4進棧,這時棧按順序剩下e1,e3,e4,出棧的順序...