1. 程式人生 > >【nowcoder】 4th T1 動態點分治

【nowcoder】 4th T1 動態點分治

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 #define
ll 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 動態點分治