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 动态点分治的主要内容,如果未能解决你的问题,请参考以下文章

动态点分治

ZJOI2017练习D8T1 mushroom(点分治)

点分治+动态点分治

动态点分治总结

动态点分治学习笔记

分治动态点分治 ([ZJOI2007]捉迷藏)