QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#311627 | #6134. Soldier Game | yyyyxh | WA | 433ms | 12576kb | C++23 | 1.7kb | 2024-01-22 16:21:59 | 2024-01-22 16:21:59 |
Judging History
answer
#include <cstdio>
#include <algorithm>
#define lc (p<<1)
#define rc (p<<1|1)
using namespace std;
int read(){
char c=getchar();int x=0;bool f=0;
while(c<48||c>57) f|=(c=='-'),c=getchar();
do x=(x<<1)+(x<<3)+(c^48),c=getchar();
while(c>=48&&c<=57);
if(f) return -x;
return x;
}
typedef long long ll;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=100003;
struct Mat{
ll f[2][2];
friend Mat operator*(const Mat A,const Mat B){
Mat C;
C.f[0][0]=min(max(A.f[0][0],B.f[0][0]),max(A.f[0][1],B.f[1][0]));
C.f[0][1]=min(max(A.f[0][0],B.f[0][1]),max(A.f[0][1],B.f[1][1]));
C.f[1][0]=min(max(A.f[1][0],B.f[0][0]),max(A.f[1][1],B.f[1][0]));
C.f[1][1]=min(max(A.f[1][0],B.f[0][1]),max(A.f[1][1],B.f[1][1]));
return C;
}
void init(){f[0][0]=f[1][1]=f[1][0]=INF;f[0][1]=-INF;}
}sg[N<<2];
struct node{
int w,p,t;
friend bool operator<(const node a,const node b){
return a.w>b.w;
}
}s[N<<1];
int n,rk;
int a[N];
void build(int p=1,int l=1,int r=n){
if(l==r) return sg[p].init();
int mid=(l+r)>>1;
build(lc,l,mid);
build(rc,mid+1,r);
sg[p]=sg[lc]*sg[rc];
}
void update(node x,int p=1,int l=1,int r=n){
if(l==r){sg[p].f[x.t][0]=x.w;return;}
int mid=(l+r)>>1;
if(x.p<=mid) update(x,lc,l,mid);
else update(x,rc,mid+1,r);
sg[p]=sg[lc]*sg[rc];
}
void solve(){
n=read();rk=0;
for(int i=1;i<=n;++i){
a[i]=read();
s[++rk]=(node){a[i],i,0};
if(i>1) s[++rk]=(node){a[i]+a[i-1],i,1};
}
build();sort(s+1,s+rk+1);
ll mn=INF;
for(int i=1;i<=rk;++i){
update(s[i]);
mn=min(mn,max(sg[1].f[0][0],sg[1].f[0][1])-s[i].w);
}
printf("%lld\n",mn);
}
int main(){
int tc=read();
while(tc--) solve();
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3508kb
input:
3 5 -1 4 2 1 1 4 1 3 2 4 1 7
output:
1 2 0
result:
ok 3 number(s): "1 2 0"
Test #2:
score: -100
Wrong Answer
time: 433ms
memory: 12576kb
input:
10010 1 1000000000 1 -1000000000 2 1000000000 -1000000000 4 1000000000 1000000000 -1000000000 -1000000000 3 100 -100 100 16 -17 91 -19 66 100 -70 -71 76 -58 99 52 19 25 -67 -63 -32 7 -95 -26 63 -55 -19 77 -100 17 -100 72 -53 -32 8 -100 53 44 -100 -65 -81 -59 100 100 57 -47 1 11 99 10 -100 3 32 2 -26...
output:
0 0 1000000000 2000000000 100 135 153 181 189 90 63 164 176 0 147 135 152 36 200 131 134 76 136 999973319 79 171 146 18 183 82 176 105 200 135 103 109 119 126 158 189 70 0 38 999859912 188 161 100 163 116 200 0 101 200 50 1 183 155 36 183 107 139 17 183 999910622 126 153 168 194 96 53 96 58 126 47 1...
result:
wrong answer 3rd numbers differ - expected: '0', found: '1000000000'