50pts WA
  • 板块P1381 单词背诵
  • 楼主COsm0s
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/4 16:15
  • 上次更新2024/7/4 18:20:47
查看原帖
50pts WA
526017
COsm0s楼主2024/7/4 16:15
string s[N];
unordered_map<string, bool> mp;
unordered_map<string, int> opt;
void Solve() {
	int n; cin >> n;
	for(int i = 1; i <= n; i ++) {
		string s; cin >> s; mp[s] = 1;
	}
	int m, aim = 0; cin >> m;
	for(int i = 1; i <= m; i ++) {
		cin >> s[i];
		if(mp[s[i]] && !opt[s[i]]) aim ++, opt[s[i]] ++;
	}
	cout << aim << '\n';
	opt.clear();
	int l = 1, r = 1, cnt = 0, maxn = 0, maxr = 0;
	while(r <= m && cnt < aim) {
		if(mp[s[r]] && !opt[s[r]]) cnt ++;
		opt[s[r]] ++;
		++ r;
	}
	-- r;
	int len = r - l + 1;
	while(l <= m && r <= m) {
//		cout << l << ' ' << r << ' ' << opt[s[l]] << '\n';
		l ++;
//		cout << opt[s[l - 1]] << ' ' << l << '\n';
		if(mp[s[l - 1]]) {
			opt[s[l - 1]] --;
			if(opt[s[l - 1]] == 0) {
				while(s[r] != s[l - 1] && r <= m) ++ r;
				if(s[r] == s[l - 1]) len = min(len, r - l + 1), opt[s[r]] ++;
			}
			else {
				len = min(len, r - l + 1);
			}
		}
		else {
			len = min(len, r - l + 1);
		}
	}
	cout << len << '\n';
}

RT.双指针 WA on #2 #6 #7 #9 #10。

2024/7/4 16:15
加载中...