20分求调,悬关
查看原帖
20分求调,悬关
736239
wanghu楼主2024/3/13 22:50

上面有一些奇怪的优化,请别在意(诶嘿!)

#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;
}
2024/3/13 22:50
加载中...