解题思路
这是一个投票统计问题,需要统计每个候选人获得的有效票数以及无效票数。
关键点
- 
输入格式:
- 第一行:候选人数量 
 - 第二行:
个候选人名字
 - 第三行:投票人数 
 - 第四行:投票内容
 
 - 第一行:候选人数量 
 - 
处理要求:
- 统计每个候选人的得票数
 - 统计无效票数(投给不存在候选人的票)
 - 按照输入顺序输出结果
 
 
代码
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
int main() {
    int n;
    while (cin >> n) {
        // 读取候选人
        vector<string> candidates(n);
        map<string, int> votes;
        for (int i = 0; i < n; i++) {
            cin >> candidates[i];
            votes[candidates[i]] = 0;  // 初始化票数
        }
        
        // 读取投票
        int m;
        cin >> m;
        int invalid = 0;
        for (int i = 0; i < m; i++) {
            string vote;
            cin >> vote;
            if (votes.find(vote) != votes.end()) {
                votes[vote]++;
            } else {
                invalid++;
            }
        }
        
        // 输出结果
        for (const string& candidate : candidates) {
            cout << candidate << " : " << votes[candidate] << endl;
        }
        cout << "Invalid : " << invalid << endl;
    }
    return 0;
}
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            
            // 读取候选人
            String[] candidates = new String[n];
            Map<String, Integer> votes = new HashMap<>();
            for (int i = 0; i < n; i++) {
                candidates[i] = sc.next();
                votes.put(candidates[i], 0);  // 初始化票数
            }
            
            // 读取投票
            int m = sc.nextInt();
            int invalid = 0;
            for (int i = 0; i < m; i++) {
                String vote = sc.next();
                if (votes.containsKey(vote)) {
                    votes.put(vote, votes.get(vote) + 1);
                } else {
                    invalid++;
                }
            }
            
            // 输出结果
            for (String candidate : candidates) {
                System.out.println(candidate + " : " + votes.get(candidate));
            }
            System.out.println("Invalid : " + invalid);
        }
    }
}
while True:
    try:
        # 读取候选人
        n = int(input())
        candidates = input().split()
        votes = {name: 0 for name in candidates}
        
        # 读取投票
        m = int(input())
        vote_list = input().split()
        
        # 统计票数
        invalid = 0
        for vote in vote_list:
            if vote in votes:
                votes[vote] += 1
            else:
                invalid += 1
        
        # 输出结果
        for candidate in candidates:
            print(f"{candidate} : {votes[candidate]}")
        print(f"Invalid : {invalid}")
        
    except:
        break
算法及复杂度
算法分析
- 使用哈希表存储每个候选人的票数
 - 遍历投票列表,统计有效票和无效票
 - 按原始顺序输出结果
 
复杂度分析
- 时间复杂度:
-
是候选人数量,
是投票数量
 - 空间复杂度:
- 需要存储候选人及其票数
 

京公网安备 11010502036488号