Gym 100712I Bahosain and Digits(开关翻转问题)

Posted 谦谦君子,陌上其华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gym 100712I Bahosain and Digits(开关翻转问题)相关的知识,希望对你有一定的参考价值。

http://codeforces.com/gym/100712/attachments

题意:

给出一串数字,每次选择连续的k个数字加上任意数(超过10就取余),最后要使得所有数字都相等,求最大的k。

 

思路:

开关翻转问题。

算法具体可以参考《挑战程序竞赛》常用技巧篇。

这道题目就是在枚举k的同时再枚举一下最后要转换成的数字即可。

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<sstream>
 6 #include<vector>
 7 #include<stack>
 8 #include<queue>
 9 #include<cmath>
10 #include<map>
11 using namespace std;
12 typedef long long ll;
13 typedef pair<int,long long> pll;
14 const int INF = 0x3f3f;
15 const int maxn=1000+5;
16 
17 int n,k;
18 int a[maxn];
19 int b[maxn];
20 int f[maxn];
21 char str[maxn];
22 
23 bool calc(int k)
24 {
25     memcpy(b,a,sizeof(a));
26     for(int t=0;t<10;t++)   //枚举最后转换的数
27     {
28         memset(f,0,sizeof(f));
29         int sum=0;
30         for(int i=0;i+k<=n;i++)
31         {
32             if(((b[i]+sum)%10)!=t)
33                 f[i]=((t-b[i]-sum)%10+10)%10;
34             sum+=f[i];
35             if(i-k+1>=0)  sum-=f[i-k+1];
36         }
37 
38 
39         bool flag=true;
40         for(int i=n-k+1;i<n;i++)
41         {
42             if(((b[i]+sum)%10)!=t)
43             {
44                 flag=false;
45                 break;
46             }
47             if(i-k+1>=0)  sum-=f[i-k+1];
48         }
49         if(flag)  return true;
50     }
51     return false;
52 }
53 
54 int main()
55 {
56     //freopen("input.txt","r",stdin);
57     int T;
58     scanf("%d",&T);
59     while(T--)
60     {
61         getchar();
62         scanf("%s",str);
63 
64         n=strlen(str);
65         for(int i=0;i<n;i++)  a[i]=str[i]-0;
66 
67         for(int k=n;k>=1;k--)
68         {
69             if(calc(k))
70             {
71                 printf("%d\n",k);
72                 break;
73             }
74         }
75     }
76     return 0;
77 }

 

以上是关于Gym 100712I Bahosain and Digits(开关翻转问题)的主要内容,如果未能解决你的问题,请参考以下文章

Gym 100507H - Pair: normal and paranormal

Dales and Hills Gym - 101411D

Gym - 100923APor Costel and Azerah(思维水题)

Gym 240668E - Anton and Ira - [贪心]

Por Costel and the Match Gym - 100923H(经典种类并查集)

Rasheda And The Zeriba Gym - 100283A ? 计算几何