HDU 4287 Intelligent IME(string,map,stl,make_pair)
//numx[i]=string(sx); //把char[]类型转换成string类型
// mat.insert(make_pair(numx[i],0)); //创造一个(string,int)整体——结构体,插入map
//sx[j]=ch[sx[j]-'a'];//把字母转换成相应的数字
//mat.find(numx[i])->second;//返回位置—— 取map当中num[i]对应的键值
#include<cstdio> #include<cstring> #include<string> #include<map> using namespace std; char ch[30]={'2','2','2','3','3','3','4','4','4','5','5','5','6','6','6','7','7','7','7','8','8','8','9','9','9','9'}; string numx[5005]; map<string,int> mat; //int是用来记录要输出的答案——数量的 int main() { int cas,n,m; char sx[10]; scanf("%d",&cas); for(;cas--;) { mat.clear(); scanf("%d%d",&n,&m); for(int i=0;i<n;++i) { scanf("%s",sx); numx[i]=string(sx); //把char[]类型转换成string类型 mat.insert(make_pair(numx[i],0)); //创造一个(string,int)整体——结构体,插入map } for(int i=0;i<m;++i) { scanf("%s",sx); for(int j=0;j < strlen(sx);++j) sx[j]=ch[sx[j]-'a'];//把字母转换成相应的数字 if(mat.count( string(sx) )!=0) (mat.find( string(sx) )->second)++; } for(int i=0;i<n;++i) printf("%d\n",mat.find(numx[i])->second); } return 0; }
//根据百度来的写的:
//string ch = "22233344455566677778889999";//string下标也从0开始
//mapp[ num[i] ] = 0; //保存这种按法相应的答案——种类数的,键值对应
// int len=sx.length(); //string的长度s.length()
//mapp.count(sx)//返回map当中sx的数目——查找mapp当中是否存在sx这个数字串(键),若sx的数目不等于0,说明存在
//mapp[sx]++;//键sx对应的值增加1
#include<stdio.h> #include<string> #include<string.h> #include<iostream> #include<algorithm> #include<map> using namespace std; map<string, int > mapp; string ch = "22233344455566677778889999";//string下标也从0开始 int main() { int n,m,t,i; string num[5010]; string sx; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(i=0;i<n;i++) { cin >> num[i]; mapp[ num[i] ] = 0; //保存这种按法相应的答案——种类数的 } for(i=0;i<m;i++) { cin >> sx; int len=sx.length(); //string的长度s.length() for(int j=0; j<len; j++) { sx[j]=ch[ sx[j]-'a' ];//把字母转换成数字(也是字符型的数字),模拟一下就理解了,string下标从0开始 } if(mapp.count(sx))//查找mapp当中是否存在sx这个数字串(键),若sx的数目不等于0,说明存在 { mapp[sx]++;//键sx对应的值数目增加1 } } //输出n个健相应的值 for(i=0;i<n;i++) { printf("%d\n",mapp[num[i]]); } } return 0; }
一道又一道,好高兴!