Codeforces 801 A.Vicious Keyboard & Jxnu Group Programming Ladder Tournament 2017江西师大新生赛 L1-2.叶神的字符串
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,所以没超时。。。
Codeforces 801 A.Vicious Keyboard & Jxnu Group Programming Ladder Tournament 2017江西师大新生赛 L1-2.叶神的字符串的更多相关文章
- 【codeforces 801A】Vicious Keyboard
[题目链接]:http://codeforces.com/contest/801/problem/A [题意] 一个字符串只由VK组成; 让你修改一个字符; 使得剩下的字符串里面子串VK的个数最大; ...
- AC日记——Vicious Keyboard codeforces 801a
801A - Vicious Keyboard 思路: 水题: 来,上代码: #include <cstdio> #include <cstring> #include < ...
- 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 ...
- Codeforces Gym101606 A.Alien Sunset (2017 United Kingdom and Ireland Programming Contest (UKIEPC 2017))
2017 United Kingdom and Ireland Programming Contest (UKIEPC 2017) 寒假第一次组队训练赛,和学长一起训练,题目难度是3颗星,我和猪队友写 ...
- Codeforces Gym101572 B.Best Relay Team (2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017))
2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017) 今日份的训练,题目难度4颗星,心态被打崩了,会的算法太少了,知 ...
- codeforces#1248D2. The World Is Just a Programming Task(括号匹配转化为折线处理)
题目链接: http://codeforces.com/contest/1248/problem/D2 题意: 可以执行一次字符交换的操作 使得操作后的字符串,循环移位并且成功匹配的方案最多 输出最多 ...
- Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2)(A.思维题,B.思维题)
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 ...
- 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 ...
随机推荐
- C++——派生类中的访问——可见性问题
C++中派生类对基类成员的访问形式主要有以下两种: 1.内部访问:由派生类中新增成员对基类继承来的成员的访问. 2.对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.今天给大家介绍在 ...
- 如何用PhotoShop制作网站的favicon.ico
所谓favicon,即Favorites Icon的缩写,顾名思义,便是其可以让浏览器的收藏夹中除显示相应的标题外,还以图标的方式区别不同的网站.当然,这不仅仅是Favicon的全部,根据浏览器的不同 ...
- Vim使用小记(二)插件管理
By francis_hao Mar 8,2017 Vundle Vundle,全称为Vim bundle,是一个插件管理器.可以对vim插件进行安装和卸载. Vundle的安装方法看这里[参考 ...
- HNOI2002 营业额统计 [Splay]
题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...
- OSI 七层模型和 TCP/IP 四层模型 及 相关网络协议
简介 OSI 是理论上的模型,也就是一个统一的国际标准,现在的很多网络设备或者是网络协议都不同程度的精简了自己的所谓的模型,那么他们为了自己的通讯兼容都会参考这个OSI模型 TCP/IP 包括: TC ...
- centos7 mysql cluster集群搭建基于docker
1.准备 mn:集群管理服务器用于管理集群的其他节点.我们可以从管理节点创建和配置集群上的新节点.重新启动.删除或备份节点. db2/db3:这是节点间同步和数据复制的过程发生的层. db4/db5: ...
- Spring MVC框架下 从后台读取数据库并显示在前台页面【笔记自用 不推荐作为参考】
1.书写jsp页面 people.jsp 1.设计显示格式以及内容显示 2.设计显示内容的范围 2.书写entity实体类 PeopleFormMap.java 书写传入的参数主要包括 要引用的数据 ...
- 【BZOJ】1782: [Usaco2010 Feb]slowdown 慢慢游
[算法]DFS序+树状数组 [题解]题意相当于统计前i-1个点在第i个点的祖先的个数,显然可以用dfs维护,用树状数组差分维护前缀和. 出栈不新加节点就要注意左闭右开,即in[a[i]]处+1,ou[ ...
- bzoj 1191 匈牙利算法
只需要做一遍匈牙利,只要有一个没法匹配上就break就行了 /************************************************************** Proble ...
- vc6.0里使用lib(静态库)的方法
vc6.0 中使用lib文件 使用库的方法如下:1. 包含库的头文件(把库的头文件包含到项目中)在应用程序工程中使用#include "file path"file path可以为 ...