题目:字符置换,字符串中出现的连续两个“.”。若每次操作把其中最开始的连续两个“.”以一个“.”替代,则可以将函数f(s) 定义为 使得串中不出现连续两个“.”的最小置换次数。 现考虑m个字符替换操作,每次将指定位置的字符替换为给定的字符,求替换后函数f(s)的值。
* 输入描述:输入有若干组,每组的第一行为两个整数n和m,1<= n,m<=300000,表示字符串的长度和字符替换操作的次数。
* 第二行为所给的字符串,随后紧跟m行操作,每行由一个正整数x和一个字母c构成,表示将字符串中位置m处的字符置换为字母c。
* 输出描述:对每组输入的每个置换操作,在单独的行中输出函数f(s)的结果
这道题注意每一个更改在上一个基础之上,下标是从1开始的。
输入实例
10 3
.b..bz....
2 h
7 .
2 .
输出
4
4
6
代码如下
#include<iostream>
#include<string>
using namespace std;
int main(int argc, char* argv[])
{
int n;
int m;
while (cin >> n)
{
cin >> m;
string primer;
cin >> primer;
for (int i = 0; i < m; i++)
{
int index;
cin >> index;
index--;
cin >> primer[index];
int tag = 0;
int count = 0;
for (int j = 0; j < n; j++)
{
if (primer[j] == '.')
{
count++;
}
else
{
if (count != 0)
{
tag += count - 1;
count = 0;
}
}
}
if(count!=0)
tag += count - 1;
cout << tag << endl;
}
}
return 0;
}