【问题标题】:228A codeforces getting wrong answer code 19228A codeforces 得到错误的答案代码 19
【发布时间】:2021-08-26 07:47:23
【问题描述】:

这是代码强制的问题:

Valera the Horse 将和朋友一起去参加派对。他一直 追了一段时间的流行趋势,他知道这很 流行穿不同颜色的所有马蹄铁。瓦莱拉有四个 去年留下的马蹄铁,但也许其中一些有 相同的颜色。在这种情况下,他需要去商店买一些 更多的马蹄铁,不要在他时髦的同志面前丢脸。

幸好这家店在阳光下有卖各种颜色的马蹄铁 瓦莱拉有足够的钱买其中任何四个。然而,为了 为了省钱,他想尽量少花钱, 所以你需要帮助 Valera 并确定最少的人数是多少 他需要购买的马蹄铁才能穿上四个不同颜色的马蹄铁 参加聚会。输入

第一行包含四个空格分隔的整数 s1, s2, s3, s4 (1 ≤ s1, s2, s3, s4 ≤ 109) — 瓦莱拉的马蹄铁颜色。

考虑用整数索引的所有可能的颜色。输出

打印一个整数——瓦莱拉需要的最小马蹄铁数量 买。

示例

Input 1 7 3 3 
Output 1
Input 7 7 7 7
Output 3

我的解决方案的输出是正确的,但在测试 19 中有 错误答案我的解决方案是:

#include <iostream>

using namespace std;
int main()
{
    //input
    int input[4];
    int i, j, count = 0;

    for (i = 0; i < 4; i++) {
        cin >> input[i];
      
    }
    for (i = 0; i < 4; i++) {
        for (j = i+1; j < 4; j++) {
           if (count == 3)break;
            if (input[i] == input[j]) {
                count += 1;
            }
       }
    }
    cout << count;
    return 0;
}

测试用例 19 是:

Input
147784432 947653080 947653080 947653080
Participant's output
3
Jury's answer
2
Checker comment
wrong answer 1st numbers differ - expected: '2', found: '3'

【问题讨论】:

  • 能否请您显示您遇到的错误。这对我来说运行和编译都很好
  • 不知道关于 codeforce 的事情我敢打赌这是由于 O(n^2) 时间复杂度而超出了时间限制或类似情况。
  • @zubergu 并非如此,代码具有 O(1) 复杂度,因为输入大小是固定的。 OP 得到“测试 19 的错误答案”
  • @tamara 我建议对 qsn 进行编辑以包含测试用例 19。简而言之,您的代码在这些类型的输入 a b b b 中失败。在这里,当 i = 1 时,检查 += 2,当 i = 2 时,检查 += 1 使检查 = 3。在这里,您将最后 b 计数两次。你可以通过跳过相等的元素来避免这种情况。
  • 我想一个更简单的策略是计算不同元素的数量,并输出4 - count

标签: c++


【解决方案1】:

只需稍微修改您的代码即可计算不同数字的数量并输出4 - count

#include <iostream>
 
using namespace std;
int main()
{
    //input
    int input[4];
    int i, j, count = 1;
 
    for (i = 0; i < 4; i++) {
        cin >> input[i];
      
    }
    for (i = 1; i < 4; i++) {
        for (j = 0; j < i; j++) {
            if(input[i] == input[j]) break;
       }
       if(i == j) count++;
    }
    cout << (4-count);
    return 0;
}

在 codeforces 中被接受。

【讨论】:

    【解决方案2】:

    稍微优化的代码版本:

    #include <iostream>
    
    using namespace std;
    int main()
    {
        //input
        int input[4];
        int i, j, count = 0;
        bool done = false;
    
        for (i = 0; i < 4; i++) {
            cin >> input[i];
          
        }
        for (i = 0; (i < 3) && (!done); i++) {
            for (j = i+1; (j < 4) && (!done); j++) {
                if (input[i] == input[j]) {
                    count += 1;
                    done = count == 3;
                }
           }
        }
        cout << count;
        return 0;
    }
    
    

    【讨论】:

    • 同样的问题@Bart
    • 刚刚意识到循环 i 可以低于 3。但请查看 susanth29 他的评论。
    猜你喜欢
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2019-05-06
    • 2019-02-14
    • 2016-10-23
    • 1970-01-01
    • 2014-11-21
    相关资源
    最近更新 更多