Codeforces" The New President"

时间:2015-11-29 05:23:21

标签: c++

我尝试回答编写代码来解决this问题,但我在测试15时仍然得到了错误的答案,而且我不知道代码中缺少什么。 我尝试了很多测试用例,但代码已经正确地解决了这些问题。

我的代码:

#include <iostream>
#include <map>
#include <vector>

using namespace std;

int main()
{
    int c; cin >> c;
    int v; cin >> v;

    if (c == 1 && v == 0)
    {
        cout << 1 << " " << 1;
    }
    else 
    {
        int cArray[c + 1];

        int voting[v][c];
        for (int j = 0; j<v; j++)
        {
            for (int z = 0; z<c; z++)
            {
                int temp; cin >> temp;
                voting[j][z] = temp;
            }
        }
        for (int j = 0; j <= c; j++)cArray[j] = 0;
        for (int j = 0; j<v; j++)cArray[voting[j][0]]++;

        int maxim = 0;
        int maxN = 0;
        int count = 0;
        map<int, int > cand;
        for (int j = 1; j <= c; j++)
        {
            if (cArray[j]>maxN)
            {
                cand.clear();
                cand[j] = 1;
                maxN = cArray[j];
                maxim = j;
                count = 0;
            }
            else if (cArray[j] == maxN)
            {
                cand[j] = 1;
                count++;
            }
        }

        if (count == 0)
            cout << maxim << " " << 1;

        else 
        {
            for (int j = 0; j<v; j++)
            {
                for (int z = 1; z<c; z++) 
                {
                    if (cand.count(voting[j][z])) 
                    {
                        cArray[voting[j][z]]++;
                        break;
                    }
                }
            }

            maxim = 0;
            maxN = 0;
            count = 0;
            for (int j = 1; j <= c; j++)
            {
                if (cArray[j]>maxN)
                {
                    maxN = cArray[j];
                    maxim = j;
                    count = 0;
                }
                else if (cArray[j] == maxN)
                {
                    count++;
                }
            }
            cout << maxim << " " << 2;
        }
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

您检查第一轮(胜利或前两名候选人)的算法似乎是错误的。看起来你期望前两位候选人拥有相同数量的主要选票 - 事实并非如此。如果有超过50%的选票,你想选出前两名候选人,而前一名候选人获胜。

我不想给你答案(因为这是练习的重点),但你需要重新考虑如何处理投票的第一部分。

另请注意,一旦某人投票选出前两位候选人之一,他们的二次投票就不应该计入另一位候选人(您目前正在进行投票)。