QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#840346 | #9952. JUMPin' JUMP UP!!! | chenxinyang2006 | WA | 271ms | 6248kb | C++23 | 2.5kb | 2025-01-02 17:23:47 | 2025-01-02 17:23:48 |
Judging History
answer
#include <bits/stdc++.h>
#define rep(i,j,k) for(int i=(j);i<=(k);i++)
#define per(i,j,k) for(int i=(j);i>=(k);i--)
#define uint unsigned int
#define ll long long
#define ull unsigned long long
#define db double
#define ldb long double
#define pii pair<int,int>
#define pll pair<ll,ll>
#define mkp make_pair
#define eb emplace_back
#define SZ(S) (int)S.size()
//#define mod 998244353
//#define mod 1000000007
#define inf 0x3f3f3f3f
#define linf 0x3f3f3f3f3f3f3f3f
using namespace std;
template <class T>
void chkmax(T &x,T y){
if(x < y) x = y;
}
template <class T>
void chkmin(T &x,T y){
if(x > y) x = y;
}
inline int popcnt(int x){
return __builtin_popcount(x);
}
inline int ctz(int x){
return __builtin_ctz(x);
}
/*ll power(ll p,int k = mod - 2){
ll ans = 1;
while(k){
if(k % 2 == 1) ans = ans * p % mod;
p = p * p % mod;
k /= 2;
}
return ans;
}*/
int TEST,n,m,q;
char s[100005],t[100005],str[200005];
int z[200005];
void calc(int L){
int l = 1,r = 0;
rep(i,2,L){
if(i <= r) z[i] = min(r - i + 1,z[i - l + 1]);
else z[i] = 0;
while(i + z[i] <= L && str[1 + z[i]] == str[i + z[i]]) z[i]++;
if(i + z[i] - 1 > r){
l = i;
r = i + z[i] - 1;
}
}
}
int lcp[100005],lcs[100005],sum[100005];
int getsum(int l,int r){
if(l > r) return 0;
return sum[r] - sum[l - 1];
}
void solve(){
scanf("%d%d%d",&n,&m,&q);
scanf("%s",s + 1);
scanf("%s",t + 1);
rep(i,1,m) str[i] = t[i];
calc(m);
int per = m;
rep(i,2,m) if(z[i] == m - i + 1 && m % (i - 1) == 0) chkmin(per,i - 1);
int sz = 0;
rep(i,1,per) str[++sz] = t[i];
rep(i,1,n) str[++sz] = s[i];
calc(sz);
rep(i,1,n) lcp[i] = min(per,z[per + i]);
sz = 0;
per(i,per,1) str[++sz] = t[i];
per(i,n,1) str[++sz] = s[i];
calc(sz);
per(i,n,1) lcs[i] = min(per,z[per + n - i + 1]);
rep(i,per + 1,m) sum[i] = sum[i - 1] + (s[i] != s[i - per]);
rep(i,1,q){
int pos;
ll len;
scanf("%d%lld",&pos,&len);
if(i > 1000 || getsum(pos + per,pos + m - 1)){
printf("0\n");
continue;
}
int dd = -1;
rep(d,0,per - 1){
if(d && lcs[pos + d - 1] < d) continue;
if(lcp[pos + d] < per - d) continue;
dd = d;
}
if(dd == -1){
printf("0\n");
continue;
}
len -= dd;
if(len < 0){
printf("0\n");
}else{
printf("%lld\n",len / per + (dd > 0));
}
}
}
int main(){
#ifdef cxy
freopen("test.in","r",stdin);
#endif
scanf("%d",&TEST);
while(TEST--) solve();
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3884kb
input:
1 4 2 3 abcd ba 1 2 2 2 3 2
output:
1 0 0
result:
ok 3 tokens
Test #2:
score: -100
Wrong Answer
time: 271ms
memory: 6248kb
input:
1126 100 19 100 bzbzbzbzbzbzbzbyydzbzbzbzbzbzbzbzbyydzbzbzbzbzbzbzbzbyydzbzbzbzbzbzbzbzbyydzbzbzbzbzbzbzbzbyydzbzbzb bzbzbzbzbzbzbzbyydz 56 76480443552173389 38 692816130192550219 33 703112329902236202 74 338839552028748732 5 231782307290688600 11 676202903706926230 23 327149191556259670 46 89836370...
output:
4025286502745968 36464006852239486 37005912100117695 17833660633092039 12199068804773084 35589626510890854 17218378502961035 47282300283677508 49424514696701913 718335379405515 21864557806215529 34660711060158649 10954133132284724 4309231433797527 51886468906311731 8242825662888107 52502379720138545...
result:
wrong answer 1st words differ - expected: '4025286502745967', found: '4025286502745968'