看题知用法,可以跟hash一起使用写hash的题。
1.【模板】字符串哈希
输入:
5
abc
aaaa
abc
abcc
12345
输出:
4
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
map<string,int>a; //map定义,相当于数组的升级版,表示string到int的映射,举个简单例子,可以用a["OK"]=1;进行赋值(说白了就是括号里的数据类型是map<>前面的,=的后面就是map<>后面的数据类型)
string s;//用于读入的字符串
int n,m;
int main(){
cin>>n;
m=n;
while(n--){//因为是n+m就可以了,所以直接n--,--QWQ
cin>>s;
if(a[s]==1)m--;
else
a[s]=1;
}
printf("%d",m);
return 0;//完美的过程,不是吗?
}
2.进制转换
输入:
16
FF
2
map写法
#include<bits/stdc++.h>
using namespace std;
map<char,int> nums; map<int,char> nums_;//用map存互相对应的数(要不是有10以上的进制。。。)
int n,num,temp; string x; char ans[100];
int main()
{
for(int i=0;i<10;i++)
nums[i+'0']=i,nums_[i]=i+'0';
for(char i='A';i<='F';i++)
nums[i]=i-'A'+10,nums_[i-'A'+10]=i;//上面4行初始化map
scanf("%d",&n); cin>>x;
for(int i=0;i<x.length();i++)
num=num*n+nums[x[i]];//转化到10进制
scanf("%d",&n);
while(num)
ans[temp++]=nums_[num%n],num/=n;//转化到m进制
for(int i=temp-1;i>=0;i--)
printf("%c",ans[i]);//输出
return 0;
}