CodeForces-570C Replacement
2015-08-14 16:12
267 查看
#include <cstdio> #include <cstring> #include <iostream> using namespace std; const int maxn = 3e5 + 5; int n, m; char str[maxn]; char letter; int site; int cnt, step; int main() { while(~scanf("%d %d", & n, & m)) { scanf("%s", str); str = 'X'; cnt = step = 0; for(int i = 0; i <= n; i ++) { if(str[i] == '.') cnt ++; else { if(cnt > 0) { step += cnt - 1; cnt = 0; } } } for(int i = 1; i <= m; i ++) { scanf("%d %c", & site, & letter); if(letter == '.' && str[site - 1] != '.') { if(str[site - 1 - 1] == '.' && str[site - 1 + 1] != '.') step ++; else if(str[site - 1 - 1] != '.' && str[site - 1 + 1] == '.') step ++; else if(str[site - 1 - 1] == '.' && str[site - 1 + 1] == '.') step += 2; } else if(letter != '.' && str[site - 1] == '.') { if(str[site - 1 - 1] == '.' && str[site - 1 + 1] == '.') step -= 2; else if(str[site - 1 - 1] == '.' && str[site - 1 + 1] != '.') step --; else if(str[site - 1 - 1] != '.' && str[site - 1 + 1] == '.') step --; } str[site - 1] = letter; printf("%d\n", step); } } }
题意:遇到两个'.'就变成一个。问需要的步数。第一行输入n表示字符串的长度。输入m表示替换次数。第二行输入字符串。接下来的m行输入 要替换的序号 和 替换的字符。问每变换一遍输出变句号的步数。
题解:直接暴力肯定不行的,,,肯定超时..不能看是c题而想太麻烦..以上代码是很简单的操作。不需要什么线段树,树状数组。只要判断改变的字符前后的字符是什么,再在原步数改变1 或者 2就可以。
相关文章推荐
- seajs所遇问题随记
- 为应用程序池 'DefaultAppPool' 提供服务的进程意外终止-解决办法
- MD5加密以及验证加密-加盐
- ffmpeg一些基本命令
- Leetcode#31||Next Permutation
- hdu 1285 确定比赛名次
- 【Ex2013】【Outlook】代表发送邮件存放在个人邮箱发件箱内
- POJ 2528 Mayor's posters(离散化加线段树成段更新)
- 数据类型的理解
- KVC和KVO
- HDU2094:产生冠军
- Catch That Cow
- 菜鸟笔记之---js div 弹出层
- jQuery---分类添加内容
- 62. Event shiftKey 事件属性
- C. Replacement-----(Codeforces Round #316 (Div. 2))
- awk学习
- 手机APP
- 黑马程序员--Java之IO流
- MongoDB之索引