nowcoder 4th T1 动态点分治
Posted aropm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nowcoder 4th T1 动态点分治相关的知识,希望对你有一定的参考价值。
题目链接: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(‘ ‘); 44 } 45 return 0; 46 }
PE几次以后才知道puts()自动换行
以上是关于nowcoder 4th T1 动态点分治的主要内容,如果未能解决你的问题,请参考以下文章