zoukankan      html  css  js  c++  java
  • 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
    ",k);
    72                 break;
    73             }
    74         }
    75     }
    76     return 0;
    77 }
  • 相关阅读:
    CSS3 target伪类简介
    不用position,让div垂直居中
    css3 在线编辑工具 连兼容都写好了
    a标签伪类的顺序
    oncopy和onpaste
    【leetcode】1523. Count Odd Numbers in an Interval Range
    【leetcode】1518. Water Bottles
    【leetcode】1514. Path with Maximum Probability
    【leetcode】1513. Number of Substrings With Only 1s
    【leetcode】1512. Number of Good Pairs
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6959166.html
Copyright © 2011-2022 走看看