Map的用法

定义和遍历:

	for(map<char, int> ::iterator it = m1.begin() ; it != m1.end() ; it ++)
	{
		cout << it->first << " " << it->second;
	}

题目1:

注册名字(name),前面有相同的则对应加上数字(name1,name2,name3…),并输出。
反之,则注册为name,并输出OK

题目大意:

输入n个字符串,对于第一次输入的字符串(以前没有出现过的字符串)输出“OK”,对于第二次输入的字符串(与第原来输入过的字符串重复了)输出“以前出现过的字符串原型和出现次数”。

样例:

InputcopyOutputcopy
4
abacaba
acaba
abacaba
acab
OK
OK
abacaba1
OK

利用map保存同一字符串输入的个数,在0的时候输出OK,大于0输出个数即可。 

AC代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include <map>

using namespace std;

int main()
{
	map<string, int> p;
	
    int n;
    cin >> n;
    
    while(n --)
    {
    	string a;
    	cin >> a;
    	
    	if(p[a] == 0) // 字符串首次出现 
    	{
    		cout << "OK" << endl;
    		p[a] = 1; // 字符串已经出现了一次 
		}
		else
		{
			cout << a << p[a] << endl;
			p[a] ++; // 字符串的出现次数+1 
		}
	}
	return 0;
}

题目2:

乃琳是A-SOUL的MC担当(坏女人担当),她在和珈乐玩一种很新的牌。

这个牌的名字叫Asoul牌,牌名只由单个字母组成。

游戏规则是:每个人会得到一定数量的牌,然后每个人可以任意次将两张相同牌名的的牌组合成Asoul牌打出,最后剩下牌少的人获得胜利,如果剩余牌数相同,则收获平局,双方都无法获胜。

由于牌太多,乃琳整理不过来了,因此她决定向奶琪琳们求助,询问自己最后会剩下多少张牌,以及自己是否能够战胜珈乐。

输入描述:

第一行输入一个整数 n,代表两人各得到了多少张牌。1≤n≤106

第二行输入一个长度为 n 的字符串,代表乃琳得到的牌。

第三行输入一个长度为 n 的字符串,代表珈乐得到的牌。

输出描述:

第一行输出一个整数,代表乃琳最后剩下的牌数。

第二行输出一个字符串,若乃琳能够战胜珈乐,则输出"HHH!",否则输出 “555!”。

用例输入 1

5
AAEEW
ABCDD

用例输出 1

1
HHH!

用例输入 2

5
AAEEW
BBCDD

用例输出 2

1
555!

AC代码:

#include<bits/stdc++.h>

using namespace std;

typedef long long LL;

const int N = 1e5 + 10;

//map用来记录每个字符串中字符出现的次数
map< char, int > m1; 
map< char, int > m2;

int a[N];
int cnt1,cnt2;
int sum1,sum2;

int main()
{
    int n;
	scanf("%d",&n);
	
	string s1;
	string s2;
	cin >> s1;
	cin >> s2;
	
	for(int i = 0 ; i < n ; i ++)  m1[s1[i]] ++; // 记录第一个字符串中每个字符的出现次数
	
	for(int i = 0 ; i < n ; i ++)  m2[s2[i]] ++; // 记录第一个字符串中每个字符的出现次数
	
	
	for(map<char, int> ::iterator it = m1.begin() ; it != m1.end() ; it ++)
	{
		sum1 += it->second / 2; // 记录第一个字符串的”对数“
	}
	
	for(map<char, int >::iterator it = m2.begin() ; it != m2.end() ; it ++)
	{
		sum2 += it->second / 2; // 记录第二个字符串的”对数“
	}
	
	printf("%d\n",n - sum1 * 2);
	if(sum1 > sum2) printf("HHH!\n");
	else  printf("555!\n");
	
	return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

21RGHLY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值