首页 > 其他 > 详细

I - Infinite Improbability Drive

时间:2019-04-05 17:26:12      阅读:188      评论:0      收藏:0      [点我收藏+]

I - Infinite Improbability Drive
http://codeforces.com/gym/241750/problem/I
不断构造,先填n-1个0,然后能放1就放1,最后这个序列的长度就是(1<<n)+n-1,也就是每添加1位就要匹配出来一个。

技术分享图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<ctime>
 7 #include<set>
 8 #include<map>
 9 #include<stack>
10 #include<cstring>
11 #define inf 2147483647
12 #define ls rt<<1
13 #define rs rt<<1|1
14 #define lson ls,nl,mid,l,r
15 #define rson rs,mid+1,nr,l,r
16 #define N 100010
17 #define For(i,a,b) for(int i=a;i<=b;i++)
18 #define p(a) putchar(a)
19 #define g() getchar()
20 
21 using namespace std;
22 int n;
23 int a[10000000];
24 bool vis[10000000];
25 int ans,t,fin;
26 
27 void in(int &x){
28     int y=1;
29     char c=g();x=0;
30     while(c<0||c>9){
31         if(c==-)y=-1;
32         c=g();
33     }
34     while(c<=9&&c>=0){
35         x=(x<<1)+(x<<3)+c-0;c=g();
36     }
37     x*=y;
38 }
39 void o(int x){
40     if(x<0){
41         p(-);
42         x=-x;
43     }
44     if(x>9)o(x/10);
45     p(x%10+0);
46 }
47 int main(){
48     freopen("infinite.in","r",stdin);
49     freopen("infinite.out","w",stdout);
50     in(n);
51     fin=(1<<n)+n-1;
52     a[n]=1;
53     vis[1]=1;
54     For(i,n+1,fin){
55         a[i]=1;
56         t=1;
57         ans=0;
58         for(int j=i;j>=i-n+1;j--){
59             ans+=t*a[j];
60             t<<=1;
61         }
62         if(vis[ans]){
63             vis[ans-1]=1;
64             a[i]=0;
65         }
66         else
67             vis[ans]=1;
68     }
69     For(i,1,fin)
70         o(a[i]);
71     return 0;
72         
73 }
View Code

 

I - Infinite Improbability Drive

原文:https://www.cnblogs.com/war1111/p/10659155.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!