太戈编程 [寒]C201-L2

[寒]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

#include







using 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

#include
using 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
#include
using 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
#include
using namespace std;
struct ren{
	string name,gender;
	bool operator<(const ren&b)const{
		if(nameb.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
#include
using 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< 
  

你可能感兴趣的:(算法)