我试图解决问题stavatar http://www.spoj.com/problems/STAVATAR/。 我已经尝试了所有测试用例生成随机的但仍然是wa。 我无法在算法中找到缺陷。
#include<cstring>
#include<iostream>
#include<cstdio>
using namespace std;
char a[1000010],b[1000010];
int d[1000010];
int main()
{
int n;
scanf("%d",&n);
scanf("%s",a);
scanf("%s",b);
int k;
scanf("%d",&k);
for(int i=0;i<k;i++)
{
int x,y;
scanf("%d %d",&x,&y);
++d[x],++d[y+1];
}
long long sum=0;
for(int i=0;i<n;i++)
{
sum+=d[i];
if(sum%2!=0)
{
char t;
t=a[i];
a[i]=b[i];
b[i]=t;
}
}
printf("%s\n",a);
printf("%s\n",b);
return 0;
}
答案 0 :(得分:1)
如果你注意Constraints
,特别是最后一部分:
你可能会注意到最后的部分:
&#39; .... \吨\ r \ X0B \ 0℃&#39;
这些是白色空间可打印字符。
现在,回到你的解决方案。我们可以看到您使用scanf输入字符串,这将读取它遇到的第一个空格,可以是'\t', '\x0b', '\x0c'
上的任何空格。但在此特定问题中,字符串应仅以'\n'
字符终止。
例如: 如果字符串是:
ab\tcd
看起来像
在CLI中
ab cd
。问题要求第一个字符串为ab cd
,而您将ab
作为第一个字符串,cd
作为第二个字符串。
我想,你了解这个解决方案获得WA的原因。
此外,您可能会发现this功能有用。
修改: -
也可以通过这种方式使用scanf
函数 - scanf("%[^\n]s", string);
来执行相同的任务。