Spoj ABCD错误答案

时间:2013-05-22 04:53:25

标签: c

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

我收到了错误的答案,但我真的无法弄清楚原因。我已经在论坛和评论中尝试了所有测试用例。是否接受任何有效的解决方案,或者只接受他们在其文件中的解决方案。

LOGIC:

  1. 计算row1中每个字符的出现次数。
  2. 逐行填充row2,检查左边字符的上部字符,并计算< Ñ
  3. 我的代码是:

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

1 个答案:

答案 0 :(得分:0)

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

试试这个测试用例 3 ABACAD

输出可以是: BCDBDC