読者です 読者をやめる 読者になる 読者になる

誤読

文字通りくそコード

CF 779 D

知見を得た。


100前後するやつでACできた
判定部分をラムダでまとめるとif(judge())みたいな感じでキレイだし、100前後するやつも書けるので採用
結局、rの値が可能範囲にあったために起きたバグ
半開万歳

signed main() {
	char buf[200001];
	scanf("%s", buf);
	string p = buf;
	scanf("%s", buf);
	string t = buf;
	vector<int> h(p.length());
	REP(i, p.length()) {
		int a;
		scanf("%d", &a);
		a--;
		h[a] = i + 1;
	}
	int l = 0, r = p.length()+100;

	while (1) {

		auto judge = [&](int cur) {
			int pp = 0;
			REP(i, t.length()) {
				bool ex = 0;
				for (; p.length() > pp; pp++) {
					if (p[pp] == t[i] && cur <= h[pp]) {
						ex = 1;
						pp++;
						break;
					}
				}
				if (!ex) {
					return false;
					break;
				}
			}
			return true;
		};
		int mid = (l + r) / 2;

		if (judge(mid)) {
			l = mid;
		}
		else {
			r = mid;
		}

		if (r - l == 1) {
			printf("%d\n", l - 1);
			break;
		}
	}

	return 0;
}