从后向前扫即可。情况有点多,不要落下就行。
#include<bits/stdc++.h>
using namespace std;
char mz[55][55],str[55];
int main()
{
int T,i,j,n,m,ans,open,close;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=0;j<m;j++)
scanf(" %c",&mz[i][j]);
for(i=0;i<m;i++)
mz[0][i]='-';
for(i=0;i<m;i++)
str[i]=mz[n][i];
ans=n;
for(i=n-1;i>=0;i--)
{
close=open=0;
for(j=0;j<m;j++)
{
if(mz[i][j]=='?'||mz[i][j]==str[j])
continue;
if(str[j]=='?')
str[j]=mz[i][j];
else if(mz[i][j]=='+')
open=1;
else
close=1;
}
if(close)
{
ans++;
for(j=0;j<m;j++)
{
if(mz[i][j]=='-')
str[j]='-';
if(mz[i][j]=='?'&&str[j]=='+')
str[j]='?';
}
}
if(open)
{
ans++;
for(j=0;j<m;j++)
{
if(mz[i][j]=='+')
str[j]='+';
if(mz[i][j]=='?'&&str[j]=='-')
str[j]='?';
}
}
}
printf("%d\n",ans);
}
}
本文介绍了一种使用C++实现的字符串处理算法,该算法能够有效地处理包含特殊字符的二维矩阵,并通过向前扫描的方式更新字符串状态,确保最终输出正确且符合特定规则。此算法适用于需要对大量字符串进行操作和转换的场景。
5万+

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



