http://codeforces.com/problemset/problem/570/C
题意:给一个字符串,然后两个连续的“.”可以变化一次,然后进行m次操作,问每次操作后可以进行如上的变换多少次。
这真的是一道很水的暴力题,但是我开始的做法真的是变态暴力,后来仔细想想之后的每次操作都可以由上一步的答案稍加推测得来。
设原来的字符串为S,进行操作的位置为pos,操作字符为op;
- 如果原来的 s[pos] 和 op相同,那么结果不变
- 如果二者不同,要把s[pos]换成op,那么讨论s[pos-1]和s[pos+1]的情况
具体的做法看代码。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char s[300100];
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m))
{
memset(s,0,sizeof(s));
for(int i=1;i<=n;i++) scanf(" %c",&s[i]);
int cnt=0;
int ans=0;
for(int i=1;i<n;i++)
{
if(s[i]=='.'&&s[i+1]=='.') ans++;
}
while(m--)
{
int pos;
char op;
scanf("%d %c",&pos,&op);
if(s[pos]=='.' && op!='.')
{
if(pos>=1&&s[pos+1]=='.') ans--;
if(pos<=n&&s[pos-1]=='.') ans--;
}
else if(op=='.'&& s[pos]!='.')
{
if(pos>=1&&s[pos+1]=='.') ans++;
if(pos<=n&&s[pos-1]=='.') ans++;
}
s[pos]=op;
printf("%d\n",ans);
}
}
return 0;
}
我现在已经水的一无四处了,还是不能太浪…Orz。
Codeforces暴力解题技巧:字符串操作与变换
本文详细解析了一个在Codeforces平台上遇到的字符串操作与变换问题,通过逐步推导和代码实现,展示了如何高效解决此类题目。重点在于理解原始字符串状态到最终状态的转换规律,以及如何利用前一步的结果推测下一步的操作次数。
448

被折叠的 条评论
为什么被折叠?



