STL——おみやげをまらいました!
题目描述
蛙蛙还是给你带来了礼物。但它有个小小的要求,那就是你得在石头剪刀布上赢过它才能拿到礼物哦!
你们这样规定:有三个字符串 S1,S2,S3,表示三种出拳种类,其中S1
可以打败 S2,S2可以打败 S3,S3 可以打败 S1 。
现在根据你的观察,你已经知道了蛙蛙心想的出拳顺序,你需要安排自己的出拳顺序,使得你能在每一局中都获胜。
输入描述
前三行每行两个字符串,每行Sa,Sb,表示Sa能打败Sb。
数据保证不互相矛盾,且其中有恰好三种不同的字符串。
接下去一个数N,表示N次对战。接下去N行每行一个字符串,表示蛙蛙的出拳种类。注意,蛙蛙的出拳可能不合法(即不是三种字符串中的),这时请输出“Fake”。
输出描述
共N行,每行一个字符串,表示每一局你需要出什么。
如果对手出的不合法,输出“Fake”。
示例
输入
stone sci
sci paper
paper stone
4
stone
sci
spock
paper
输出
paper
stone
Fake
sci
备注
2<=|S|<=50
1<=N<=100
分析
这题用map求解就行。
方法一:
#include<cstdio>
#include<algorithm>
#include<map>
#include<string>
#include<iostream>
#include<cstring>
using namespace std;
map<string,string> f;
int main()
{
string a,b;
for(int i=0;i<3;i++){
cin>>a>>b;
f[b]=a;
}
int n;
cin>>n;
string t;
for(int i=0;i<n;i++){
cin>>t;
if(f.find(t)==f.end()){
cout<<"Fake"<<endl;
}
else{
cout<<f[t]<<endl;
}
}
return 0;
}
方法二:
#include<cstdio>
#include<algorithm>
#include<map>
#include<string>
#include<iostream>
#include<cstring>
using namespace std;
map<string,string> f;
int main()
{
string a,b;
for(int i=0;i<3;i++){
cin>>a>>b;
f.insert(make_pair(b,a));//以b和a的值创建一个新的pair对象,其元素类型分别是b和a的类型。
}
int n;
cin>>n;
string t;
for(int i=0;i<n;i++){
cin>>t;
if(f.find(t)==f.end()){
cout<<"Fake"<<endl;
}
else{
cout<<f.find(t)->second<<endl;
}
}
return 0;
}
这个方法与方法一的主要区别是运用了make_pair
这里有有关pair的基本用法总结:
https://blog.csdn.net/sevenjoin/article/details/81937695