답안 #826492

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
826492 2023-08-15T15:57:22 Z QwertyPi Necklace (Subtask 1-3) (BOI19_necklace1) C++14
25 / 85
1500 ms 308 KB
#include <bits/stdc++.h>
#define int long long
using namespace std;

struct answer{
	int a, x, y;
};

const int P = 1e9 + 7, A = 13895;
const int N = 3e4 + 11;
int norm(int x){
	return (x % P + P) % P;
}

int h_s[N], h_t[N], pw[N];

int hash_s(int i, int l){
	return norm(h_s[i + l] - h_s[i] * pw[l]);
}

int hash_t(int i, int l){
	return norm(h_t[i + l] - h_t[i] * pw[l]);
}

bool are_equal(int l, int i, int j){
	for(int k = 0; k < l; k++){
		if(hash_s(i, l) == norm(hash_t(j + k, l - k) * pw[k] + hash_t(j, k))){
			return true;
		}
	}
	return false;
}

answer query(const string& s, const string& t){
	int n = s.size(), m = t.size();
	h_s[0] = 0; for(int i = 0; i < n; i++) h_s[i + 1] = (h_s[i] * A + s[i] - 'a') % P;
	h_t[0] = 0; for(int i = 0; i < m; i++) h_t[i + 1] = (h_t[i] * A + t[i] - 'a') % P;
	pw[0] = 1; for(int i = 0; i < max(n, m); i++) pw[i + 1] = pw[i] * A % P;
	answer ans {-1, 0, 0};
	for(int l = 1; l <= min(n, m); l++){
		for(int i = 0; i <= n - l; i++){
			for(int j = 0; j <= m - l; j++){
				bool ok = are_equal(l, i, j);
				if(ok){
					ans = answer {l, i, j};
				}
			}
		}
	}
	return ans;
}

int32_t main(){
	string s, t; cin >> s >> t;
	answer a1 = query(s, t);
	reverse(t.begin(), t.end());
	answer a2 = query(s, t); a2.y = t.size() - (a2.y + a2.a);

	answer ans; ans.a = -1;
	if(a1.a > ans.a) ans = a1;
	if(a2.a > ans.a) ans = a2;
	cout << ans.a << endl;
	cout << ans.x << ' ' << ans.y << endl; 
}
# 결과 실행 시간 메모리 Grader output
1 Correct 71 ms 304 KB Output is correct
2 Correct 85 ms 308 KB Output is correct
3 Correct 75 ms 296 KB Output is correct
4 Correct 94 ms 212 KB Output is correct
5 Correct 125 ms 304 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 71 ms 304 KB Output is correct
2 Correct 85 ms 308 KB Output is correct
3 Correct 75 ms 296 KB Output is correct
4 Correct 94 ms 212 KB Output is correct
5 Correct 125 ms 304 KB Output is correct
6 Execution timed out 1562 ms 212 KB Time limit exceeded
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 71 ms 304 KB Output is correct
2 Correct 85 ms 308 KB Output is correct
3 Correct 75 ms 296 KB Output is correct
4 Correct 94 ms 212 KB Output is correct
5 Correct 125 ms 304 KB Output is correct
6 Execution timed out 1562 ms 212 KB Time limit exceeded
7 Halted 0 ms 0 KB -