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 }
时间: 2024-10-12 14:22:14

Gym 100712I Bahosain and Digits(开关翻转问题)的相关文章

Bahosain and Digits

/* Author: 2486 Memory: 4 KB Time: 78 MS Language: GNU G++ 4.9.2 Result: Accepted Public: No Yes */ //ACM反转类提醒的基本模板 #include <cstdio> #include <iostream> #include <string> #include <algorithm> #include <cstring> using namespa

C#OOP之三 控制结构

控制结构的意义 通常,程序中的语句按编写的顺序一条一条的执行,称为顺序执行.程序员可以用一些不同的C#语句指定下一个要执行的语句不是紧邻其后的语句,这成为控制转移. 20世纪60年代,人们发现,软件开发小组遇到的许多困难都是由于控制转移造成的,因此提出了结构化编程的思想. 为了使程序更容易开发和维护,程序员开始认真考虑结构化编程,因为结构化编程更清晰,更易调试与修改并且不容易出错. 经Bohm和Jacopini研究表明,在结构化编程中,所有程序只有三种控制结构,即顺序结构.选择结构和循环结构.术

翻转问题(开关,开灯问题)求解技巧

转载自:http://blog.csdn.net/ac_hell/article/details/51077320 翻转问题技巧详解 例.给定一个01串,现有翻转规则:翻转某一个位置时其后面2个位置也会跟着翻转,也就是每次翻转都会翻转3个连续的位置.要将01串全部翻转为0,求最小的翻转次数 形似这类题的问题叫做翻转问题,也可以叫开关问题,对于这类题通常都会用到下面我要说的方法来解 ①.若某一个位置被翻转了n次,则其实际上被翻转了n%2次,因为翻转2k次相当与没翻转,翻转2k+1次相当于翻转了1次

翻转整数 Reverse digits of a number

两种方法翻转一个整数,顺序翻转和递归翻转 这里没考虑overflow的情况 递归的作用是使得反向处理,即从递归栈的最低端开始处理,通过画图可得. 如果是rec(num/10): 12345 1234 123 12 1         <-- 递归使得这个最先处理 package recursion; public class Reverse_digits_of_a_number { public static void main(String[] args) { int num = 123; S

NVIDIA DIGITS 学习笔记(NVIDIA DIGITS-2.0 + Ubuntu 14.04 + CUDA 7.0 + cuDNN 7.0 + Caffe 0.13.0)

转自:http://blog.csdn.net/enjoyyl/article/details/47397505?from=timeline&isappinstalled=0#10006-weixin-1-52626-6b3bffd01fdde4900130bc5a2751b6d1 NVIDIA DIGITS-2.0 + Ubuntu 14.04 + CUDA 7.0 + cuDNN 7.0 + Caffe 0.13.0环境配置 引言 DIGITS简介 DIGITS特性 资源信息 说明 DIGI

ACM: Gym 100935B Weird Cryptography - 简单的字符串处理

Weird Cryptography Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Gym 100935B Description standard input/output Khaled was sitting in the garden under an apple tree, suddenly! , well... you should guess what happened, an

LeetCode:Reverse Integer - 翻转数字

1.题目名称 Reverse Integer(翻转数字) 2.题目地址 https://leetcode.com/problems/reverse-integer/ 3.题目内容 英文:Reverse digits of an integer. 中文:翻转一个正整数的各位,形成一个新数字 例如:x = 123, return 321:x = -123, return -321 4.一个有瑕疵的方法(不能AC) 一个比较好想到的方法,是先将输入的数字转换为字符串,再将字符串翻转后转换为数字.这个方

[POJ1830]开关问题(高斯消元,异或方程组)

题目链接:http://poj.org/problem?id=1830 题意:中文题面,求的是方案数. 首先可以知道, 如果方案数不止一个的话,说明矩阵行列式值为0,即存在自由变元,由于变量只有两种状态,那么方案数就是2^自由变元数. 从起始状态到终止状态,只需要关心起始和终止哪些状态不一样就行,也就是翻转奇数次. 由于是倒推,所以开关的影响要反过来存. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 typedef long lon

Codeforces GYM 100114 C. Sequence 打表

C. Sequence Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Description Integer sequences are very interesting mathematical objects. Let us examine a sequence generated with the use of two operations: doubling and “digit