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

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

逻辑:


计算第1行中每个字符的出现次数。
逐行填充第2行,检查高位字符和左侧字符,并计数

我的代码是:

#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论坛都没有找到我的解决方案。

最佳答案

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

试试这个测试用例
3
计算机辅助设计

输出可以是:
BCDBDC

关于c - Spoj ABCD错误答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16683712/

10-11 07:49