Codeforces 228A题测试用例19返回Wrong Answer问题求助
问题分析与修复
错误原因
你的代码核心逻辑存在偏差:你统计的是数组中两两相等的元素对数,而非需要替换的重复元素数量。
当某一个颜色出现k次时:
- 实际需要替换的数量为
k-1,总购买量为4 - 不同颜色总数 - 你的代码会统计出
k*(k-1)/2次相等配对,直接作为结果输出会导致数值偏大
以出错的第19个测试用例147784432 947653080 947653080 947653080为例: - 不同颜色总数为2,正确答案是
4-2=2 - 你的代码统计到3次相等配对,因此错误输出3
修复方案
方案1:使用set自动去重(代码简洁易读)
#include <iostream> #include <set> using namespace std; int main() { set<int> colors; int tmp; for (int i = 0; i < 4; ++i) { cin >> tmp; colors.insert(tmp); } cout << 4 - colors.size(); return 0; }
方案2:手动统计(无需引入额外STL容器)
#include <iostream> #include <algorithm> using namespace std; int main() { int input[4]; for (int i = 0; i < 4; ++i) { cin >> input[i]; } sort(input, input + 4); int diff_cnt = 1; for (int i = 1; i < 4; ++i) { if (input[i] != input[i-1]) diff_cnt++; } cout << 4 - diff_cnt; return 0; }
内容的提问来源于stack exchange,提问作者user13408251
相关产品推荐
相关产品推荐

