昨天我正在解决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/