首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Codeforces Beta Round #2 A - Winner:模擬與 Map 統計

     編輯:關於C++

題目大意

n 輪遊戲,每輪記錄玩家名字與得分(可負)。最終總分最高者獲勝;若並列最高,則最先達到該最高分者獲勝。

解題思路

  1. 第一遍掃描:用 map 累計每人總分,記錄最高分 maxScore
  2. 第二遍掃描:再次累計,當某玩家總分 ≥ maxScore 且其最終總分 == maxScore 時,即為獲勝者,輸出並結束

C++ 實現


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

const int MAXN = 1010;
char name[MAXN][36];
int score[MAXN];

int main() {
    int n;
    scanf("%d", &n);
    map total;
    for (int i = 0; i < n; ++i) {
        scanf("%s%d", name[i], &score[i]);
        total[name[i]] += score[i];
    }
    int maxScore = 0;
    for (auto &p : total) maxScore = max(maxScore, p.second);
    map prefix;
    for (int i = 0; i < n; ++i) {
        prefix[name[i]] += score[i];
        if (prefix[name[i]] >= maxScore && total[name[i]] == maxScore) {
            puts(name[i]);
            break;
        }
    }
    return 0;
}

關鍵細節

  • 兩遍掃描:第一遍得最終分數,第二遍模擬過程找最先達標者
  • map 自動處理字符串鍵值統計
  • 題目保證至少一人最終得分 > 0

複雜度

  • 時間:O(n log n),n ≤ 1000
  • 空間:O(n)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved