【nowcoder】 4th T1 動態點分治
阿新 • • 發佈:2018-10-07
lld 技術分享 bits info urn img check std 就會
題目鏈接:https://www.nowcoder.com/acm/contest/175/A
題目名字嚇死人
std:
我
太可啪了
一道簡單的模擬題。雖然我把題意想錯了。
按照題意模擬輸出和繼承。
WA 點: 因為數據K範圍在263之內(long long:263-1,unsigned long long int :264-1)
所以會很容易爆
也會爆回[l,r]範圍內 就會WA
如何避免?
首先假設 x 為繼承的值
那麽每次改變都是x=x*k
如果每次改變的範圍都在r/k的範圍內 那麽就可避免爆
代碼如下:
1 #include<bits/stdc++.h> 2 #definell long long 3 using namespace std; 4 5 int n; 6 ll l,r,k,x; 7 bool check=false; 8 9 ll Read(){ 10 ll xxx=0,fff=1;char ch=getchar(); 11 while(ch>‘9‘||ch<‘0‘){if(ch==‘-‘) fff=-1;ch=getchar();} 12 while(ch<=‘9‘&&ch>=‘0‘){xxx=(xxx<<3)+(xxx<<1)+ch-‘0‘;ch=getchar();}13 return xxx*fff; 14 } 15 16 int main(){ 17 n=Read(); 18 while(n--){ 19 l=Read();r=Read();k=Read(); 20 check=false; 21 switch(k){ 22 case 0: if(l<=0&&r>=0){ 23 putchar(‘0‘);putchar(‘ ‘); 24 check=true; 25 }26 case 1: if(l<=1&&r>=1){ 27 putchar(‘1‘);putchar(‘ ‘); 28 check=true; 29 30 } 31 break; 32 default:for(x=1;;){ 33 if(l<=x&&x<=r) { 34 printf("%lld ",x); 35 check=true; 36 } 37 if(x<=r/k) x*=k;else break; 38 } 39 } 40 if(!check) { 41 puts("None."); 42 } 43 else putchar(‘\n‘); 44 } 45 return 0; 46 }
PE幾次以後才知道puts()自動換行
【nowcoder】 4th T1 動態點分治