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:可是我不会斗地主吖("'▽'") ~~~那就听两遍小苹果嘛~~~ 五一假期除了花时间建模 ...
随机推荐
- [置顶]
Xamarin android沉浸式状态栏
虽然关于android "沉浸式"状态栏有很多博客介绍过,从小菜到大神无一例外.我第一次看到这种"沉浸"式的效果我也以为真的是这么叫,然而根本不是这么回事,完全 ...
- js随机数生成,生成m-n的随机数
使用js生成n到m间的随机数字,主要目的是为后期的js生成验证码做准备,Math.random()函数返回0和1之间的伪随机数 var random = Math.random(); console. ...
- JavaScript 计算指定月份有多少天
用 js 画工作日历的时候,需要用 js 计算指定月份一共有多少天 在网上找了些方法,都比较繁琐,后来灵机一动,想到一个偷懒的办法,分享一下 一.原理分析 要想得到某月有多少天,只需要获取到当月最后一 ...
- Mac 配置Charles,抓取移动设备数据
有两篇很详细的教程可以参考 Charles 从入门到精通 mac环境下使用Charles抓包Https请求 但是在使用iPhone抓取https数据的时候会出现很多问题,总是提示失败. 需要注意的有: ...
- ASP.NET Core学习之二 菜鸟踩坑
对于像我这样没接触过core的人,坑还是比较多的,一些基础配置和以前差别很大,这里做下记录 一.Startup 1.注册服务 // This method gets called by the run ...
- 跟我一起读postgresql源码(八)——Executor(查询执行模块之——可优化语句的执行)
2.可优化语句的执行 可优化语句的共同特点是它们被查询编译器处理后都会生成査询计划树,这一类语句由执行器(Executor)处理.该模块对外提供了三个接口: ExecutorStart.Executo ...
- MySQL优化二 缓存参数优化
数据库属于 IO密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优化数 ...
- vue2.0 项目build后资源文件报错404的解决方案
当vue项目build后,我们会看到css.js报错404的问题: 那我们就去找错误原因吧. 首先,查看build后的dist文件目录 可以看出,js.css在index.html的同级目录下: 然后 ...
- angular4.0中form表单双向数据绑定正确姿势
issue:用[(ngModel)]="property"指令双向数据绑定,报错. reason1:使用ngModel绑定数据需要注入FormsModule模块,在app.modu ...
- solr7.2安装实例,中文分词器
一.安装实例 1.创建实例目录 [root@node004]# mkdir -p /usr/local/solr/home/jonychen 2.复制实例相关配置文件 [root@node004]# ...