2015-11-29 2 views
-2

Я попытался ответить, написав код для решения проблемы 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; 
} 
+2

Интересно, что вам разрешено зайти так далеко с массивами переменной длины в игре. Похоже, Codeforce использует компилятор с некоторыми нестандартными расширениями. – user4581301

+0

У вас нет предложений по улучшению, но ваш алгоритм является почти чистой грубой силой, и обычно эти проблемы конкуренции требуют некоторого трюка, чтобы получить ответ в соответствии с требованием времени, когда ему дается вход в наихудший случай. – user4581301

+0

да, вы совершенно правы, но в этой проблеме худший случай - ничто, поэтому я решил его с первого взгляда. Но я все еще ошибаюсь, а не предел времени :( – oyass

ответ

1

Ваш алгоритм для проверки первого раунда (выиграть или два кандидата) кажется неправильным. Похоже, вы ожидаете, что первые два кандидата будут иметь одинаковое количество первичных голосов - это не так. Вы хотите выбрать лучших двух кандидатов, а верхняя побеждает, если у нее более 50% голосов.

Я не хочу давать вам ответ (как это делается для упражнений), но вам нужно переосмыслить, как вы обрабатываете первую часть голосования.

Также обратите внимание, что как только кто-то проголосовал за одного из двух лучших кандидатов, их вторичные голоса не должны затем рассчитывать на другого кандидата (который вы сейчас делаете).

+0

Вы правы, и я улучшил его, но он все еще ошибочный ответ, но при тестировании 35 – oyass

Смежные вопросы