这个题的话,直接使用结构体数组,存储判断就可以了,这里没有卡时间复杂度,查找的时候是两层循环,刚开始的时候想可能要一层循环卡时间复杂度,试了map,没有审清题意,map的话,输出是默认关键字从小到大排序的,这里的话需要自己注意下,很多基础的知识点要自己再去看一下了。

#include<iostream>
using namespace std;
struct Vote{
    string name;
    int count;
};
int main(){
    int n;
    string name;
    while(cin>>n){
        Vote vote[105];
        for(int i=0;i<n;i++){
            cin>>name;
            vote[i].name=name;
            vote[i].count=0;
        }
        int m,other=0;
        cin>>m;
        for(int i=0;i<m;i++){
            cin>>name;
            int j;
            for(j=0;j<n;j++){
                if(vote[j].name==name){
                    vote[j].count++;
                    break;
                }
            }
            if(j==n){
                other++;
            }
        }

        for(int i=0;i<n;i++){
            cout<<vote[i].name<<" : "<<vote[i].count<<endl;
        }
        cout<<"Invalid"<<" : "<<other<<endl;
    }
    return 0;
}