-2

昨天我在解决 Spoj 问题 ABCD:http ://www.spoj.com/problems/ABCD/

我得到了错误的答案,但我真的不知道为什么。我已经尝试了论坛和评论中的所有测试用例。是否接受了任何有效的解决方案,或者是他们档案中唯一的解决方案。

逻辑:

  1. 计算 row1 中每个字符的出现次数。
  2. 将第 2 行一一填充,检查左上字符和计数 < N。

我的代码是:

#include<stdio.h>
int i;
int main()
{
  int n;
  int counts[4] = {0};
  char row1[1000000], row2[1000000];
  scanf("%d", &n);
  scanf("%s", row1);

  while(row1[i])
  {
     counts[row1[i] - 'A']++;
     i++;
  }

  i = 0;
  if(counts[0] < n && row1[i] != 'A')
  {
     row2[i] = 'A';
     counts[0]++;
  }
  else if(counts[1] < n && row1[i] != 'B')
  {
     row2[i] = 'B';
     counts[1]++;
  }
  else if(counts[2] < n && row1[i] != 'C')
  {
    row2[i] = 'C';
    counts[2]++;
  }
  else
  {
     row2[i] = 'D';
     counts[3]++;
  }
  i++;
  while(i < (2 * n))
  {
    if(counts[0] < n && row1[i] != 'A' && row2[i - 1] != 'A')
    {
      row2[i] = 'A';
      counts[0]++;
    }
    else if(counts[1] < n && row1[i] != 'B' && row2[i - 1] != 'B')
    {
       row2[i] = 'B';
       counts[1]++;
    }
    else if(counts[2] < n && row1[i] != 'C' && row2[i - 1] != 'C')
    {
       row2[i] = 'C';
       counts[2]++;
    }
    else
    {
       row2[i] = 'D';
       counts[3]++;
    }

    i++;
 }
 row2[i] = '\0';
 printf("%s", row2);
 return 0;
 }

我已经调试了几个小时,却不知道要调试什么。甚至 SPOJ 论坛也没有找到我的解决方案。

4

1 回答 1

0

嘿,我做了几乎同样的事情,也得到了 WA:P 这是这个逻辑的问题。

试试这个测试用例 3 ABACAD

输出可以是:BCDBDC

于 2013-05-29T21:56:02.783 回答