Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
52566 | Scorpio | 修复符文 | C++ | 解答错误 | 15 | 33 MS | 4504 KB | 1289 | 2022-07-19 13:06:36 |
#include<bits/stdc++.h> #define int long long using namespace std; const int maxn = 5e5 + 5; const int bse = 131; const int mod = 1e9 + 9; int hash_tar, a, b, mve, len, t; int p[2 * maxn], hash_s[2 * maxn]; string s, r; bool flg; bool check(int l, int r){ if((hash_s[r] - hash_s[l - 1]* p[r - l + 1] % mod+mod)%mod == hash_tar){ return true; } return false; } void sett(){ flg = false; for(int i = 1; i <= len; i++){ hash_s[i] = hash_s[i +len] = 0; } hash_tar = 0; return; } signed main(){ p[0] = 1; cin >> t; while(t--){ cin >> s; cin >> r; cin >> a >> b; len = s.size(); for(int i = 0; i < len; i++){ hash_tar = (hash_tar * bse % mod + r[i]) % mod; } s = s + s; for(int i = 0; i < 2 * len; i++){ hash_s[i + 1] = (hash_s[i] * bse % mod + s[i]) % mod; p[i + 1] = p[i] * bse % mod; } mve = __gcd(abs(a - b), len); for(int i = 0; i <= len / mve; i++){ if(check((i * mve), len + (i * mve) - 1)){ cout << "yes" << endl; flg = true; } if(!flg){ if(check(len - (i * mve), 2 * len - (i * mve))){ cout << "yes" << endl; flg = true; } } if(flg){ break; } } if(!flg){ cout << "no" << endl; } sett(); } return 0; }