我无法在我的算法中找到错误来尝试解决spoj stavatar

时间:2015-04-12 01:59:09

标签: algorithm

我试图解决问题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;
}

1 个答案:

答案 0 :(得分:1)

如果你注意Constraints,特别是最后一部分: enter image description here

你可能会注意到最后的部分:

  

&#39; .... \吨\ r \ X0B \ 0℃&#39;

这些是白色空间可打印字符。

现在,回到你的解决方案。我们可以看到您使用scanf输入字符串,这将读取它遇到的第一个空格,可以是'\t', '\x0b', '\x0c'上的任何空格。但在此特定问题中,字符串应仅以'\n'字符终止。

例如: 如果字符串是:

  

ab\tcd

看起来像

  

ab cd

在CLI中

。问题要求第一个字符串为ab cd,而您将ab作为第一个字符串,cd作为第二个字符串。 我想,你了解这个解决方案获得WA的原因。

此外,您可能会发现this功能有用。

修改: - 也可以通过这种方式使用scanf函数 - scanf("%[^\n]s", string);来执行相同的任务。