昨天我在解决 Spoj 问题 ABCD:http ://www.spoj.com/problems/ABCD/
我得到了错误的答案,但我真的不知道为什么。我已经尝试了论坛和评论中的所有测试用例。是否接受了任何有效的解决方案,或者是他们档案中唯一的解决方案。
逻辑:
- 计算 row1 中每个字符的出现次数。
- 将第 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 论坛也没有找到我的解决方案。