立方數(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,出棧的順序...