【赏4关】P1381 单词背诵 10pts 3TLE 6WA带hack数据求调
查看原帖
【赏4关】P1381 单词背诵 10pts 3TLE 6WA带hack数据求调
670355
Nuclear_Fish_cyq楼主2023/8/13 20:53

rt。

#include <bits/stdc++.h>
#define ll long long
#define mod 909043
using namespace std;
int n, m, ans1, a[1005], b[100005], l, r, app[909048], ans2 = INT_MAX;
bool vis[909048], flag[909048];
int gethash(string s){
	int kkk = s.size(), res = 0;
	for(int i = 0; i < kkk; i++){
		res *= 128;
		res += (int)s[i];
		res %= mod;
	}
	return res;
}

int main(){
	cin >> n;
	for(int i = 0; i < n; i++){
		string str;
		cin >> str;
		int k = gethash(str);
		flag[k] = true;
		a[i + 1] = k;
	}
	cin >> m;
	for(int i = 0; i < m; i++){
		string str;
		cin >> str;
		int k = gethash(str);
		b[i + 1] = k;
		if(flag[k] && !vis[k]){
			ans1++;
			vis[k] = true;
		}
	}
	cout << ans1 << endl;
	if(ans1 == 0){
		cout << 0 << endl;
		return 0;
	}
	l = m;
	r = m;
	while(1){
		if(ans1){
			if(l == 0){
				break;
			}
			if(vis[b[l]]){
				if(!app[b[l]]){
					ans1--;
				}
				app[b[l]]++;
			}
			l--;
		}
		else{
			while(!vis[b[r]]){
				r--;
			}
			ans2 = min(ans2, r - l);
			if(app[b[r]] >= 1){
				if(app[b[r]] == 1){
					ans1++;
				}
				r--;
				app[b[r]]--;
			}
		}
	}
	cout << ans2 << endl;
	return 0;
}
/*
input:
6
cyq
lyw
ak
ioi
wuweiqi
linmeng
15
linmeng
ak
ioi
cyq
ak
ioi
lyw
ak
ioi
wuweiqi
ak
ioi
cyq
ak
lyw
output:
6
10
*/
2023/8/13 20:53
加载中...