Вот ссылка на текст задачи. 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"); }
tid, далеко не приплюснутая реализация необходима здесь... Код (Text): SELECT * FROM berlogging.txt WHERE score>=m SORT BY score
Ezrah Действительно, разобрался. SEC70R_VA Почему нет? STL очень даже хороший инструментарий для задач спортивного программирования.