上面有一些奇怪的优化,请别在意(诶嘿!)
#include<bits/stdc++.h>
#define int long long
using namespace std;
template<typename T>inline void read(T &x){
char c=getchar();
x=0;
int f=0;
for(;!isdigit(c);c=getchar()) f|=(c=='-');
for(;isdigit(c);c=getchar()) x=((x<<3)+(x<<1)+(c^48));
x=f?-x:x;
}
template<typename T>inline void write(T x){
if(x<0) x=-x,putchar('-');
if(x>9) write(x/10);
putchar(x%10^48);
}
bool sss(string c,string d){
return c[0]<d[0];
}
string a[1000002],b[1000001];
int s,f[27],l=1;
char p;
signed main(){
int n,m;
cin>>n>>m;
//cout<<n<<" "<<m;
getline(cin,a[1000001]);
for(int i=1;i<=n;i++){
getline(cin,a[i]);
//cout<<a[i]<<" ";
}
//cout<<endl;
for(int i=1;i<=m;i++){
getline(cin,b[i]);
//cout<<b[i]<<" ";
}
//cout<<endl;
sort(a+1,a+n+1,sss);
p=a[1][0];
for(int i=1;i<=n;i++){
transform(a[i].begin(),a[i].end(),a[i].begin(),::toupper);
if(a[i][0]==p){
f[l]++;
}
else if(a[i][0]!=p){
l++;
f[l]=f[l-1];
f[l]++;
p=char(p+1);
}
//cout<<a[i]<<" "<<f[l]<<" "<<p<<endl;
}
for(int i=1;i<=26;i++){
if(f[i]==0){
f[i]=1;
}
}
for(int i=1;i<=m;i++){
for(int j=f[b[i][0]-'A'+1]-1;j<=f[b[i][0]-'A'+2];j++){
if(a[j]==b[i]){
s++;
}
}
//cout<<f[b[i][0]-'A'+1]-1<<" "<<f[b[i][0]-'A'+2]<<endl;
}
cout<<s;
return 0;
}