Задачка с Codeforces.

Тема в разделе "WASM.A&O", создана пользователем tid, 13 ноя 2011.

  1. tid

    tid Member

    Публикаций:
    0
    Регистрация:
    2 дек 2010
    Сообщения:
    57
    Вот ссылка на текст задачи.
    http://www.codeforces.ru/contest/2/problem/A

    Победитель популярной в Берляндии карточной игры «Берлоггинг» определяется по следующим правилам. Если на момент окончания игры существует только один игрок, набравший максимальное количество очков, то он и становится победителем.

    Ситуация осложняется, если таких игроков несколько. Каждый кон игры некоторый игрок выигрывает или проигрывает некоторое количество очков. В записи о ходе игры это обозначается строкой «name score», где name это имя игрока, а score целое число обозначающее количество заработанных очков данным игроком. Если score — отрицательное число, это обозначает, что игрок проиграл в этом коне. Так вот, если на конец игры несколько игроков набрали максимум очков (пусть это число равно m), то выигрывает тот из них, кто первым набрал как минимум m очков. Перед началом игры у каждого игрока 0 очков. Гарантируется, что на момент окончания игры хотя бы у одного игрока положительное число очков.

    Входные данные
    В первой строке записано целое число n (1 ≤ n ≤ 1000), n — количество конов сыгранной игры. Далее в n строках идут описания конов, в формате «name score» в хронологическом порядке, где name это строка из строчных букв латинского алфавита длины от 1 до 32, а score это целое число от -1000 до 1000 включительно.

    Выходные данные
    Выведите имя победителя игры «Берлоггинг».


    Вроде ничего сложного, но никак не могу въехать почему мой вариант не работает на всех тестах. Конечно с кодефорсес можно посмотреть лог тестов, но они дают не полный тест. а только первые несколько входных данных.

    Вот моя реализация:

    #include <iostream>
    #include <string>
    #include <map>
    using namespace std;

    struct scind {
    int score;
    int index;
    };

    int main()
    {
    int i, n, score, maxscore, minindex;
    string name, winner;
    map<string, scind> plrs;

    cin >> n;
    for (i=0;i<n;i++) {
    cin >> name >> score;
    plrs[name].index = i;
    plrs[name].score += score;
    }
    maxscore = -1001;
    for (map<string, scind>::const_iterator i = plrs.begin(); i != plrs.end();i++) {
    if (i->second.score > maxscore) {
    maxscore = i->second.score;
    }
    }
    minindex = 1001;
    for (map<string, scind>::const_iterator i = plrs.begin(); i != plrs.end();i++) {
    if (i->second.score == maxscore && i->second.index < minindex) {
    minindex = i->second.index;
    winner = i->first;
    }
    }
    cout << winner << endl;
    return 0;
    }

    и реализация одного из участников с ником Ferrus.

    #include <iostream>
    #include <string>
    #include <map>
    using namespace std;
    typedef map<string, int> zlo;
    string b1,m1,fp[1111];
    int b2,m2,n,i,fp1[1111],mx,zz;
    zlo hz,hz1;

    void main()
    {
    cin >> n;
    for (i=0;i<n;i++)
    {
    cin >> fp >> fp1;
    hz[fp]=hz[fp]+fp1;
    }
    zlo::iterator it = hz.begin();
    mx=hz.begin()->second;
    for (it=hz.begin();it!=hz.end();it++) {mx=max(mx,it->second);b1=it->second;}
    for (i=0;i<n;i++)
    {
    hz1[fp]=hz1[fp]+fp1;
    if (hz1[fp]>=mx && hz[fp]==mx) {b1=fp;break;}
    }
    cout << b1;
    //system("PAUSE");
    }
     
  2. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    Подсказка:
    .
     
  3. SEC70R_VA

    SEC70R_VA New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2011
    Сообщения:
    78
    tid, далеко не приплюснутая реализация необходима здесь...
    Код (Text):
    1. SELECT * FROM berlogging.txt WHERE score>=m SORT BY score
     
  4. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    SEC70R_VA
    Некорректное решение.
     
  5. tid

    tid Member

    Публикаций:
    0
    Регистрация:
    2 дек 2010
    Сообщения:
    57
    Ezrah
    Действительно, разобрался.
    SEC70R_VA
    Почему нет? STL очень даже хороший инструментарий для задач спортивного программирования.