HDU 1251:统计难题

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251

题意不难理解,就是先输入不知道多少个字符串,然后用一个空行结束这个输入,然后接下来不知道多少行再输入一些字符串,询问上面输入的字符串中,以该字符串为前缀的字符串的个数。

但是实现起来并不简单,首先要考虑如何输入(让第一部分的字符串在输入空行之后停止读入),然后还要考虑如何用map来标记前缀的个数。

实现:用gets()读入字符串(不能用cin>>,因为cin>>不接收空行),当某个字符串的长度为0的时候,即表示该字符串为空行,第一部分读入完毕。每次读入一个字符串,用map来记录这个字符串中从长度为1~l的字符串的个数(从后往前记录,先记录完整的字符串,然后把最后一位变成'\0',以此类推)。最后依次输入需要询问的字符串,输出出现的次数就可以了

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <limits.h>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <set>
#include <string>
#define ll long long
#define ms(a) memset(a,0,sizeof(a))
#define pi acos(-1.0)
#define INF 0x3f3f3f3f
const double E=exp(1);
const int maxn=1e6+10;
using namespace std;
int main(int argc, char const *argv[])
{
	char ch[20];
	map<string,int>mmp;
	int flag=0;
	while(gets(ch))
	{
		int l=strlen(ch);
		if(l==0)
		{
			flag++;
			break;
		}
		for(int i=l;i>0;i--)
		{
			ch[i]='\0';
			mmp[ch]++;
		}
	}
	string s;
	while(cin>>s)
	{
		cout<<mmp[s]<<endl;
	}
	return 0;
}

 

转载于:https://www.cnblogs.com/Friends-A/p/10324451.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值