Time Limit: 1 second
Memory Limit: 128 MB
【问题描述】
全国英语四级考试就这样如期到来了.可是小Y依然没有做好充分的准备。为了能够大学毕业,可怜的小Y决定作弊。(太胆大妄为了,不怕被学校开除!!)
小Y费尽心机,在考试的时候夹带了一本字典进考场。但是现在的问题是,考试的时候可能有很多单词要查,小Y能不能来得及呢?
输入格式
第一行一个整数N,表示字典中一共有多少单词(N≤10000)。
接下来每两行表示一个单词,其中:
第一行是一个长度≤100的字符串,表示这个单词,全部小写字母,单词不会重复。
第二行是一个整数,表示这个单词在字典中的页码。
接下来一行是一个整数M,表示要查的单词数(M≤10000)。
接下来M行,每行一个字符串,表示要查的单词,保证在字典中存在。
【输入格式】
第一行一个整数N,表示字典中一共有多少单词(N≤10000)。
接下来每两行表示一个单词,其中:
第一行是一个长度≤100的字符串,表示这个单词,全部小写字母,单词不会重复。
第二行是一个整数,表示这个单词在字典中的页码。
接下来一行是一个整数M,表示要查的单词数(M≤10000)。
接下来M行,每行一个字符串,表示要查的单词,保证在字典中存在。
【输出格式】
M行,每行一个整数,表示第i个单词在字典中的页数。
【输入样例】
2
scan
10
word
15
2
scan
word
【输出样例】
10
15
【题解】
这题可以用二叉搜索树,字典树,快排+二分来做。
但是C++有一个变态的东西。就是map。
它里面查找的过程都是logn。因为自带了红黑树。
#include <map>
map <string,int> dic; //下表是string类,返回值是Int类
【代码】
#include <cstdio> #include <iostream> #include <map> #include <string> using namespace std; map <string,int> dic; //定义一个map容器 int n,temp; int main() { scanf("%d",&n); getchar(); //因为用了getline,所以要先getchar一下。 for (int i = 1;i <= n;i++) { string ss; getline(cin,ss); scanf("%d",&temp); getchar(); dic[ss] = temp; //记录下ss字符串对应的int值 } scanf("%d",&n); getchar(); for (int i =1;i<= n;i++) { string s1; getline(cin,s1); printf("%d ",dic[s1]); //输入了一个字符串就直接输出它的页码就可以了。 } return 0; }