CodeForces801-A.Vicious Keyboard-暴力
2 seconds
256 megabytes
standard input
standard output
Tonio has a keyboard with only two letters, "V" and "K".
One day, he has typed out a string s with only these two letters. He really likes it when the string "VK" appears, so he wishes to change at most one letter in the string (or do no changes) to maximize the number of occurrences of that string. Compute the maximum number of times "VK" can appear as a substring (i. e. a letter "K" right after a letter "V") in the resulting string.
The first line will contain a string s consisting only of uppercase English letters "V" and "K" with length not less than 1 and not greater than 100.
Output a single integer, the maximum number of times "VK" can appear as a substring of the given string after changing at most one character.
VK
1
VV
1
V
0
VKKKKKKKKKVVVVVVVVVK
3
KVKV
1
For the first case, we do not change any letters. "VK" appears once, which is the maximum number of times it could appear.
For the second case, we can change the second character from a "V" to a "K". This will give us the string "VK". This has one occurrence of the string "VK" as a substring.
For the fourth case, we can change the fourth character from a "K" to a "V". This will give us the string "VKKVKKKKKKVVVVVVVVVK". This has three occurrences of the string "VK" as a substring. We can check no other moves can give us strictly more occurrences.
这个题和师大的新生赛的一个题好像好像。。。
Jxnu Group Programming Ladder Tournament 2017
L1-2 叶神的字符串
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 23 Accepted Submission(s) : 10
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
Input
每组测试数据输入一串由'Y','S'组成的字符串。(字符串长度最多为10000)
Output
Sample Input
YYYS
Sample Output
2
唉,真是让人无语。首先是这个师大的。
代码1:
#include<stdio.h>
#include<string.h>
int main(){
char a[];
int i,flag[],len,num1,num2;
while(gets(a)){
len=strlen(a);
for(i=;i<len;i++)
flag[i]=;
num1=;
for(i=;i<len;i++){
if(a[i]=='S'&&a[i-]=='Y'){
num1++;
flag[i]=;
flag[i-]=;
}
}
num2=;
for(i=;i<len;i++){
if(flag[i]==&&flag[i-]==){
num2++;
flag[i]=; //其实这里去掉更好
flag[i-]=; //楼上+1。。。
if(a[i]=='Y'&&a[i-]=='S')
num2--;
}
}
if(num2>=)
printf("%d\n",num1+);
else
printf("%d\n",num1);
}
return ;
}
修改了一下:
代码2:
#include<stdio.h>
#include<string.h>
int main(){
char a[];
int i,flag[],len,num1,num2;
while(gets(a)){
len=strlen(a);
for(i=;i<len;i++)flag[i]=;
num1=;
memset(flag,,sizeof(flag));
for(i=;a[i]!='\0';i++){
if(a[i]=='S'&&a[i-]=='Y'){
num1++;
flag[i]=;
flag[i-]=;
}
}
num2=;
for(i=;i<len;i++){
if(flag[i]==&&flag[i-]==){
num2++;
flag[i]=;
flag[i-]=;
if(a[i]=='Y'&&a[i-]=='S')num2--;
else break;
}
}
if(num2>=)
printf("%d\n",num1+);
else
printf("%d\n",num1);
}
return ;
}
其实还有一个代码,但是少了个判断条件,想法是一样的,不贴了。。。
然后!!!在做了cf的这个类似题之后发现了新的问题。。。
等会再说吧,要贴cf的代码了。。。
代码1:
#include<stdio.h>
#include<string.h>
int main(){
char a[];
int i,flag[],len,num1,num2;
while(gets(a)){
len=strlen(a);
for(i=;i<len;i++)flag[i]=;
num1=;
memset(flag,,sizeof(flag));
for(i=;a[i]!='\0';i++){
if(a[i]=='K'&&a[i-]=='V'){
num1++;
flag[i]=;
flag[i-]=;
}
}
num2=;
for(i=;i<len;i++){
if(flag[i]==&&flag[i-]==){
num2++; //这里和那个师大的不一样了。
if(a[i]=='V'&&a[i-]=='K')num2--;
else break;
}
}
if(num2>=)
printf("%d\n",num1+);
else
printf("%d\n",num1);
}
return ;
}
VKKVVVKVKVK这组数据如果改成师大的那个字母就wa了,因为flag[]那里错了,(第二个循环里的标记去掉就可以了) 师大的数据水过了。。。
然后!!!cf的这个可以暴力写。
代码2:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<cstdlib>
#include<string>
#define eps 0.000000001
typedef long long ll;
typedef unsigned long long LL;
using namespace std;
const int N=;
char str[N];
char b[N];
int main(){
while(gets(str)){
int len=strlen(str);int maxx=;
if(len==){cout<<<<endl;continue;}
for(int i=;i<len-;i++)if(str[i]=='V'&&str[i+]=='K')
maxx++;
for(int i=;i<len;i++){
char c=str[i];int ans=;
if(str[i]=='V')str[i]='K';
else str[i]='V';
for(int j=;j<len-;j++){
if(str[j]=='V'&&str[j+]=='K')ans++;
}
maxx=max(maxx,ans);
str[i]=c;
}
cout<<maxx<<endl;
}
}
一开始有点没太懂
以VKVKVKVVVV这个为例:第一次变成 KKVKVKVVVV,第二次 VVVKVKVVVV,还是3。。。VKKKVKVVVV ,VKVVVKVVVV,3
每次看他有几个Vk,就这样,最后取最大的,到后面的时候maxx=4,ans=4 所以还是4,但是用暴力写师大的就会超时。
暴力写时间复杂度是O(n^2),那个flag[]的时间复杂度是O(n),
因为师大的字符串长度是10000,所以暴力过不了,会超时。而cf的这个题是100,所以没超时。。。
CodeForces801-A.Vicious Keyboard-暴力的更多相关文章
- Codeforces 801 A.Vicious Keyboard & Jxnu Group Programming Ladder Tournament 2017江西师大新生赛 L1-2.叶神的字符串
A. Vicious Keyboard time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces801A Vicious Keyboard 2017-04-19 00:16 241人阅读 评论(0) 收藏
A. Vicious Keyboard time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- AC日记——Vicious Keyboard codeforces 801a
801A - Vicious Keyboard 思路: 水题: 来,上代码: #include <cstdio> #include <cstring> #include < ...
- Vicious Keyboard CodeForces - 801A (暴力+模拟)
题目链接 题意: 给定一个字符串,最多更改一个字符,问最多可以有多少个“VK”子串? 思路: 由于数据量很小,不妨尝试暴力写.首先算出不更改任何字符的情况下有多个VK字串,然后尝试每一次更改一个位置的 ...
- [CodeForce 801A] Vicious Keyboard
题目链接:http://codeforces.com/problemset/problem/801/A 思路:题目中字符串的长度最长100个字符,所以,可以考虑用暴力,先遍历一遍匹配"VK& ...
- 【codeforces 801A】Vicious Keyboard
[题目链接]:http://codeforces.com/contest/801/problem/A [题意] 一个字符串只由VK组成; 让你修改一个字符; 使得剩下的字符串里面子串VK的个数最大; ...
- Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) A B C D 暴力 水 二分 几何
A. Vicious Keyboard time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) 题解【ABCDE】
A. Vicious Keyboard 题意:给你一个字符串,里面只会包含VK,这两种字符,然后你可以改变一个字符,你要求VK这个字串出现的次数最多. 题解:数据范围很小,暴力枚举改变哪个字符,然后c ...
- 4.30-5.1cf补题
//yy:拒绝转载!!! 悄悄告诉你,做题累了,去打两把斗地主就能恢复了喔~~~ //yy:可是我不会斗地主吖("'▽'") ~~~那就听两遍小苹果嘛~~~ 五一假期除了花时间建模 ...
随机推荐
- DNS查询相关
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/45 一种简单的设计方式是在因特网上使用一个DNS服务器,该服务器 ...
- Linux目录结构介绍-http://yangrong.blog.51cto.com/6945369/1288072
1.树状目录结构图 2./目录 目录 描述 / 第一层次结构的根.整个文件系统层次结构的根目录. /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如:cat.ls.cp,和/ ...
- Effective Java 第三版——13. 谨慎地重写 clone 方法
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- jquery学习总结(超级详细)
本文仅针对jquery的部分知识点做总结,更为全面的可以去官网看中文文档.可以更为详细的了解jquery及其特性. window.onload $(document).ready() 执行 ...
- vs2017中生成.Net Standard Libarary的Nuget Package
场景: Project A 对Project B存在 project to project reference.这种场景下必须为两者都生成nuget package.这样在load Project A ...
- celery出现警告或异常的解决方式
做个笔记,记录下使用celery踩过的坑,不定期更新. warnings.warn(CDeprecationWarning(W_PICKLE_DEPRECATED)) 我用的是Flask,所以在Fl ...
- Mock拦截请求URL返回模板数据
背景 : 前后端开发依赖后端数据, 当前端页面开发完成 ,后端在没有提供前端数据的情况下 ,前端无法测试, 导致开发效率低 ,速度慢 ,为了解决这一问题 ,通过Mock模拟生成数据在不改变原有代码前提 ...
- apidoc快速生成在线文档,apidoc生成静态文件的生成规则以及原理分析
在老大的指引下,需要将系统的json文件格式转换成apidoc的json格式,也就是json格式的重组,但是这个apidoc的生成格式是不固定的,因为apidoc有自己一套的生成规则,我需要研究一下是 ...
- 设计一个有getMin功能的栈(1)
题目: 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 要求: 1.pop.push.getMin操作的时间复杂度都是O(1) 2.设计的栈类型可以输用现成的栈结构 解答 ...
- Core Java 谈谈 ThreadPoolExecutor
说起Java 7的Executors框架的线程池,同学们能想到有几种线程池,它们分别是什么? 一共有四个,它们分别是Executors的 newSingleThreadPool(), newCache ...