QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#207619 | #6769. Monster Hunter | veg# | WA | 1ms | 5908kb | C++23 | 2.2kb | 2023-10-08 17:46:33 | 2023-10-08 17:46:33 |
Judging History
answer
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5;
int n,m,a[N],b[N],c[N],sum,s[N][5];
bool check(ll x) { //x=ksum+b
ll k=x/n,yu=x%n;
ll s1=k*s[n][1]+s[yu][1],s2=k*s[n][2]+s[yu][2],s3=k*s[n][3]+s[yu][3];
for(int i=1;i<=m;++i) {
c[i]=b[i];
if(s3&&(b[i]&1)&&(b[i]>1)) b[i]-=3,s3--;
}
/* printf("%d %d %d\n",s1,s2,s3);
for(int i=1;i<=m;++i) {
printf("%d ",b[i]);
}
puts("");*/
if(s3) {
for(int i=1;i<=m;++i) {
if((b[i]/6)*2<=s3) {
s3-=(b[i]/6)*2;
b[i]%=6;
} else {
if(b[i]/3>=s3) {
b[i]-=3*s3;
} else {
b[i]-=6*(s3/2);
s3%=2;
}
break;
}
}
}
/* printf("%d %d %d\n",s1,s2,s3);
for(int i=1;i<=m;++i) {
printf("%d ",b[i]);
}
puts("");*/
if(s3) {
for(int i=1;i<=m;++i) {
if(b[i]>3) {
b[i]-=3;
s3--;
if(s3==0) break;
}
}
}
/* printf("%d %d %d\n",s1,s2,s3);
for(int i=1;i<=m;++i) {
printf("%d ",b[i]);
}
puts("");*/
if(s3) {
for(int i=1;i<=m;++i) {
if(b[i]>0) {
s3--;
b[i]=0;
if(s3==0) break;
}
}
}
/* printf("%d %d %d\n",s1,s2,s3);
for(int i=1;i<=m;++i) {
printf("%d ",b[i]);
}
puts("");*/
if(s2) {
for(int i=1;i<=m;++i) {
if(b[i]/2<=s2) {
s2-=b[i]/2;
b[i]%=2;
if(s2==0) break;
} else {
b[i]-=s2*2;
s2=0;
break;
}
}
}
if(s2) {
for(int i=1;i<=m;++i) {
if(b[i]&&s2) {
s2--; b[i]=0;
if(s2==0) break;
}
}
}
for(int i=1;i<=m;++i ){
if(b[i]>0) s1-=b[i],b[i]=0;
}
for(int i=1;i<=m;++i) b[i]=c[i];
return s1>=0;
}
int main() {
// freopen("1.in","r",stdin);
int T; scanf("%d",&T);
while(T--) {
scanf("%d",&n);
for(int i=1;i<=n;++i) {
scanf("%d",&a[i]);
for(int j=1;j<=3;++j) {
s[i][j]=s[i-1][j]+(a[i]==j);
}
}
scanf("%d",&m);
ll l=0,r=0;
for(int i=1;i<=m;++i) {
scanf("%d",&b[i]); r+=b[i];
}
sum=s[n][1]+2*s[n][2]+3*s[n][3];
l=r/sum*n; ll ans=0;
// printf("%d\n",check(4));
// printf("%lld %lld\n",l,r);
while(l<=r) {
ll mid=l+r>>1;
if(check(mid)) {
ans=mid,r=mid-1;
} else l=mid+1;
}
printf("%lld\n",ans);
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 5908kb
input:
2 2 3 2 3 2 4 2 5 1 2 3 2 1 2 3 3
output:
4 3
result:
ok 2 lines
Test #2:
score: -100
Wrong Answer
time: 1ms
memory: 5856kb
input:
100 21 1 3 3 3 2 3 3 2 2 1 3 2 1 3 2 1 1 1 3 3 3 3 3 3 1 19 1 3 1 1 3 3 1 3 2 3 2 2 3 3 1 1 2 2 2 10 2 2 3 1 5 2 2 5 5 3 8 1 3 3 1 3 2 3 1 3 1 2 1 27 1 1 1 2 1 3 1 2 2 3 3 3 1 1 1 1 2 1 2 2 2 2 3 2 1 3 2 4 5 1 2 2 23 2 1 3 2 3 2 2 3 1 2 1 3 1 2 3 1 3 1 2 2 2 1 1 10 4 3 5 4 5 4 1 4 3 4 8 1 2 1 3 2 3 ...
output:
3 15 3 7 19 12 3 8 7 20 5 10 6 10 3 10 16 1 5 6 10 14 13 8 9 5 13 15 5 10 16 15 10 1 10 4 3 16 5 4 7 8 7 5 13 10 10 11 14 3 9 8 19 16 8 25 11 21 2 3 14 12 4 12 17 22 11 3 14 15 2 9 12 7 3 9 4 9 11 2 2 5 5 3 2 2 4 6 7 10 3 14 2 1 5 4 9 13 14 16
result:
wrong answer 25th lines differ - expected: '8', found: '9'