QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#760459 | #7618. Pattern Search | inksamurai | WA | 99ms | 3772kb | C++23 | 1.9kb | 2024-11-18 17:01:42 | 2024-11-18 17:01:44 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)
#define per(i,n) for(int i=n-1;i>=0;i--)
#define rng(i,c,n) for(int i=c;i<n;i++)
#define fi first
#define se second
#define pb push_back
#define sz(a) (int)a.size()
#define all(a) a.begin(),a.end()
#define vec(...) vector<__VA_ARGS__>
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> pii;
void print(){cout<<'\n';}
template<class h,class...t>
void print(const h&v,const t&...u){cout<<v<<' ',print(u...);}
const int SI=26;
vi get(string s){
vi cnt(SI);
rep(i,sz(s)) cnt[s[i]-'a']+=1;
return cnt;
}
void slv(){
string s,t;
cin>>s>>t;
int n=sz(s),m=sz(t);
vi cnts=get(s),cntt=get(t);
rep(i,SI){
if(cnts[i]<cntt[i]){
print(0);
return;
}
}
vi can(m+1,1);
vec(vi) qs(m+1,vi(SI));
rng(pat,1,m+1){
int k=m/pat;
int lo=0,hi=0;
rep(i,SI){
if(!cntt[i]) continue;
// x * k >= cntt[i] - x * k
int c=cntt[i];
int x=(c+2*k-1)/(2*k);
int y=c/k;
if(y<c-y*k) can[pat]=0;
assert(x*k>=cntt[i]-x*k);
lo+=x;
hi+=y;
qs[pat][i]=x;
}
if(!(lo<=pat and pat<=hi)) can[pat]=0;
}
auto af=[&](int x){
rng(pat,1,m+1){
if(!can[pat]) continue;
int pok=1;
rep(i,SI){
if(!cntt[i]) continue;
if(cnts[i]-cntt[i]<x){
pok=0;
break;
}
// (cnts[i] - cntt[i]) / p >= x
// (cnts[i] - cntt[i]) / x >= p
int p=min(cntt[i]/(m/pat),(cnts[i]-cntt[i])/x);
while((cnts[i]-cntt[i])/p<x) p+=1;
if(!(qs[pat][i]<=p)){
pok=0;
break;
}
}
if(pok) return 1;
}
return 0;
};
// print(af(1));
int l=1,r=n;
int opt=0;
while(l<=r){
int _m=(l+r)/2;
if(af(_m)) opt=_m,l=_m+1;
else r=_m-1;
}
opt+=1;
print(opt);
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0);
int t;
cin>>t;
rep(cs,t){
slv();
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3508kb
input:
2 bajkaaall aal abca cba
output:
2 1
result:
ok 2 number(s): "2 1"
Test #2:
score: 0
Accepted
time: 0ms
memory: 3512kb
input:
16 a a a b b a aa a ab aa ab b ab c aaz az abcde edcba aaaaaaaaaaaabbb aaaaaaaaabb aaaaaazz az aaaaaaaaaz zzzzz gggggggggggggggggggge ggggeeee hyphyphyphyphyphyphyphyphyphyphyphyp eeeeeeeeee hyphyphyphyphyphyphyphyphyphyphyphype eeteeteeteet aaaabbbbbbcccccccc aaabbbbbcccccc
output:
1 0 0 2 0 1 0 1 1 2 2 0 0 0 0 1
result:
ok 16 numbers
Test #3:
score: -100
Wrong Answer
time: 99ms
memory: 3772kb
input:
90522 cyykzyylklyll ylcyllklzk ttusuuudtdtqus uuddu uefyqfkiblyfkyd ffyyqde qfxqecljeqeedea jqdxf prrbfxdxffpbpp ffppd ynjgygygjnjnjg jgynjggn maenpaksmxyya saxkep nrdnbnjipnjowjz djbwojzrpni oputuoufoojupu uoouopo mphmhphpkpkpmhp phmhpppp zwznzpzqyjczzy wczjnpzqy pfxfxxkfffpfx fxffkffxpx hzdhzhhh h...
output:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 1 1 1 2 1 1 4 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 3 1 2 1 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 4 1 2 1 1 1 1 1 3 1 1 3 1 1 1 1 1 1 1 1 1 1 1 3 1 1 ...
result:
wrong answer 55th numbers differ - expected: '1', found: '2'