【u226】查单词

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;	
}


原文地址:https://www.cnblogs.com/AWCXV/p/7632354.html