[寒]C201-L2 |
【课堂探讨题目】记忆小王子
共有n个数字按顺序依次出现,对于每个数字,你需要回答当 前这个数字是第几次出现。
输入第一行为正整数n,n<=10000
输入第二行为n个正整数,均不超过109
输入样例 6 9 8 9 9 8 9
输出样例 1 1 2 3 2 4
输入样例 10 7 7 7 6 8 8 8 6 6 7
输出样例 1 2 3 1 1 2 3 2 3 4
#includeusing namespace std; struct info{//自定义类型info int cnt;//出现总次数 int pos;//首次出现位置 }; /* map d; key value */ int main(){ map d; string s; getline(cin,s); for(int i = 0;i < s.size();i++){ d[s[i]].cnt++;//s[i]出现次数加1 if(d[s[i]].cnt == 1){//若s[i]第1次出现 d[s[i]].pos = i;//s[i]首次出现位置记录为i } } map :: iterator mit; for(mit = d.begin();mit != d.end();mit++){//输出迭代器对应first值 符号 cout << mit -> second.cnt << " ";//输出迭代器对应second值里的cnt 出现总次数 cout << mit -> second.pos << endl;//输出迭代器对应second值里的pos 首次出现位置 } return 0; }
331. 世界编程大赛
题目描述
世界编程大赛已经结束,所有选手的成绩已经测试出来。共n位选手,每个人的信息包括:姓名,国家/地区,得分。请为每个参赛国家/地区,评选出该地区的第一名,如果同分按照输入顺序排列。按照地区字典序输出结果。
输入输出格式
输入第一行为正整数n,以下n行每行为选手的姓名,地区,整数得分,姓名是一个字符串其间没有空格,地区名也类似。n<=1000。
输出第一行的整数代表共有几个地区参赛,之后若干行,每行为地区名,该地区第一名的选手姓名,按照地区名的字典序排列。
输入样例#1:
7 Mike China 999 Petr Russia 1000 Shawn China 1000 Aamir India 500 Tiancheng China 1000 Jose Mexico 250 Mark USA 888
输出样例#1:
5 China Shawn India Aamir Mexico Jose Russia Petr USA Mark
#includeusing namespace std; struct ren{//自定义类型ren //代表人的信息 string name;//姓名 int score;//得分 }; int main(){ map d; string x; int n; cin >> n; for(int i = 0;i < n;i++){ ren r; cin >> r.name >> x >> r.score; if(d[x].score < r.score){//若地区x当前最高分于选手r的得分 d[x] = r;//设置选手r为地区x的第1名 } } cout << d.size() << endl; map :: iterator mit; for(mit = d.begin();mit != d.end();mit++){ cout << mit -> first << " ";//输出迭代器对应first值 地区 cout << mit -> second.name << endl;//输出迭代器对应second值里的name 第一名的姓名 } return 0; }
318. 扑克高手
题目描述
扑克高手MIKE,他玩的游戏使用1幅扑克牌(不使用大鬼和小鬼),共52张牌。MIKE今天运气不好,一直在输,他怀疑扑克牌被动了手脚:如果他能发现2张牌花色和大小都一样,那么就能确定牌有问题。
输入输出格式
输入第一行是正整数n代表已经打出几张牌,以下n行依次为这些牌的花色和大小。
如果发现了问题,就输出I am angry,否则输出Nice hand。
输入样例#1:
5 diamond 8 spade A diamond 10 heart Q diamond 8
输出样例#1:
I am angry
#includeusing namespace std; int main() { int n; cin >> n; map , int> cardMap; // 使用 map 存储牌的信息,pair 存储花色和大小,int 存储出现次数 bool isProblem = false; for (int i = 0; i < n; ++i) { string suit, rank; cin >> suit >> rank; pair card = make_pair(suit, rank); if (cardMap[card] > 0) { // 如果已经出现过该牌 isProblem = true; break; } cardMap[card]++; // 该牌出现次数加 1 } if (isProblem) { cout << "I am angry" << endl; } else { cout << "Nice hand" << endl; } return 0; }
330. 期末成绩
题目描述
期末成绩已经出来了,大家考的都很好,老师需要把每个人的语数外成绩登记到电脑里。如果输入的成绩有错误,老师会在之后重新再次输入。
注意:如果两条信息的姓名和性别一样,就认为是同一个人。如果姓名一样但性别不同,则对应两个不同的人。
输入输出格式
输入第一行为n,代表共有n次成绩登记,以下每行为姓名,性别,语数外的整数成绩。n<=1000。
输出第一行为人数,之后每行为每个人的姓名,性别和总分,按照姓名字典序排列,如有同名男生排在前。
输入样例#1:
5 Mike male 90 100 88 Sylvia female 100 100 100 Mike female 59 8 59 Luke male 6 6 6 Mike male 0 0 1
输出样例#1:
4 Luke male 18 Mike male 1 Mike female 126 Sylvia female 300
#includeusing namespace std; struct ren{ string name,gender; bool operator<(const ren&b)const{ if(name b.name) return 0; if(gender>b.gender) return 1; return 0; } }; int main(){ //freopen(".in","r",stdin); //freopen(".out","w",stdout); map d; int x,y,z; int n; cin>>n; for(int i=0;i >r.name>>r.gender>>x>>y>>z; int sum=x+y+z; d[r]=sum; } cout< ::iterator mit; for(mit=d.begin();mit!=d.end();mit++){ cout<<(mit->first.name)<<" "; cout<<(mit->first.gender)<<" "; cout<<(mit->second)< 783. 王牌特工2鹦鹉破密
题目描述
你是一个厉害的特工,现在已成功抓捕到敌人老大。。。。。。的宠物鹦鹉。你希望通过这只鹦鹉,猜出敌人机密文件的3位密码,因为这只鹦鹉可能听到过一些绝密信息。鹦鹉是个话痨,陆续报出n个数字。其中连续3个数组成的字符串可能是密码,这样的可能性有(n-2)种。你希望找到出现频率并列第一的是哪些密码,请按照字典序输出。
输入输出格式
输入格式
输入文件parrot.in 输入第一行为正整数n,n<=100000。第二行为n个数字,之间没有空格,每个数在0到9中。输出格式
输出文件parrot.out 输出若干行,每行一个3位密码,按照字典序排列。输入输出样例
输入样例#1:
10 6888823333输出样例#1:
333 888输入样例#2:
8 12312312输出样例#2:
123 231 312#includeusing namespace std; int main(){ freopen("parrot.in","r",stdin); freopen("parrot.out","w",stdout); int n; string s; cin>>n>>s; map cnt; for(int i=0;i<=n-3;i++) cnt[s.substr(i,3)]++; int big=0; map ::iterator it; for(it=cnt.begin();it!=cnt.end();it++) big=max(big,it->second); for(it=cnt.begin();it!=cnt.end();it++) if(big==it->second) cout< first<