Я попытался ответить, написав код для решения проблемы this, но я все еще получаю неправильный ответ при тестировании 15, и я не знаю, чего не хватает в моем коде. Я пробовал много тестовых примеров, но код решил их все правильно.Codeforces «Новый президент»
Мой код:
#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;
}
Интересно, что вам разрешено зайти так далеко с массивами переменной длины в игре. Похоже, Codeforce использует компилятор с некоторыми нестандартными расширениями. – user4581301
У вас нет предложений по улучшению, но ваш алгоритм является почти чистой грубой силой, и обычно эти проблемы конкуренции требуют некоторого трюка, чтобы получить ответ в соответствии с требованием времени, когда ему дается вход в наихудший случай. – user4581301
да, вы совершенно правы, но в этой проблеме худший случай - ничто, поэтому я решил его с первого взгляда. Но я все еще ошибаюсь, а не предел времени :( – oyass