QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#698811 | #5978. Runaway Quail | FLY | 23 ✓ | 2401ms | 7236kb | C++14 | 2.0kb | 2024-11-01 22:09:13 | 2024-11-01 22:09:13 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define db long double
#define gc getchar
#define pb push_back
#define all(x) x.begin(),x.end()
#define y1 __
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define dFor(i,a,b) for(int i=(a);i>=(b);i--)
#define tomin(x,y) x=min(x,y)
#define tomax(x,y) x=max(x,y)
#define abs_(x) max(x,-(x))
#define eq(x,y) (abs_((x)-(y))<=eps)
#define ull unsigned long long
const int N=505;
const db eps=1e-12,I=1e18;
int read()
{
int x=0; int y=1; char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') y=0;
for(;isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+(c^48);
return y?x:-x;
}
char getc() { char c=getchar(); for(;!isdigit(c)&&!isalpha(c);c=getchar()); return c; }
int n;
db Y;
struct _N
{
int x,y;
bool operator <(_N t)const
{
if(y^t.y) return y<t.y;
if(x>0) return x<t.x;
return x>t.x;
}
}a[N],b[N];
int c1[N],c2[N];
int ct1,ct2;
db f[N][N];
db cost(_N x,db y) { return (x.x+y*x.y)*1.0/(Y-x.y); }
db pos(_N x,db nw) { return x.x+x.y*nw; }
db work()
{
Y=read(); n=read();
For(i,1,n) c1[i]=read();
For(i,1,n) c2[i]=read();
ct1=ct2=0;
For(i,1,n)
{
if(c1[i]>0) a[++ct1]=(_N){c1[i],c2[i]};
else b[++ct2]=(_N){-c1[i],c2[i]};
}
sort(a+1,a+ct1+1);
sort(b+1,b+ct2+1);
For(i,0,ct1) For(j,0,ct2) f[i][j]=I;
f[ct1][ct2]=0;
dFor(i,ct1,0) dFor(j,ct2,0)
{
db nw=f[i][j],st1=pos(a[i],nw),st2=pos(b[j],nw),s=0;
dFor(k,i,1)
{
if(pos(a[k],nw)>=st1-eps) tomax(s,cost(a[k],nw));
tomin(f[k-1][j],nw+s*2-(k==1&&j==0?s:0));
}
s=0;
dFor(k,j,1)
{
// cout<<i<<" "<<j<<" "<<k<<" "<<nw<<" "<<pos(b[k],nw)<<" "<<st2<<" "<<cost(b[k])<<endl;
if(pos(b[k],nw)>=st2-eps) tomax(s,cost(b[k],nw));
// cout<<s<<endl;
tomin(f[i][k-1],nw+s*2-(k==1&&i==0?s:0));
}
}
return f[0][0];
}
int main()
{
// freopen("tiii.in","r",stdin);
// freopen("tiii.out","w",stdout);
int T=read();
For(i,1,T) printf("Case #%d: %.9Lf\n",i,work());
// while(T--) printf("%d\n",work());
return 0;
}
/*
*/
详细
Subtask #1:
score: 8
Accepted
Test #1:
score: 8
Accepted
time: 1ms
memory: 5968kb
input:
50 4 3 -3 -6 -9 3 2 1 2 2 1 -1 1 1 1000 25 769234 -5735820 -524288 -5403090 -6429140 1574982 1 -9733628 -1407481 4093041 4117720 -3193501 -9765195 -3069520 1122216 -5799108 131072 -8482066 -256 -8021159 -8958386 -7027036 5370579 -3602534 -6834567 425 102 744 155 339 19 999 19 159 198 51 304 369 601 ...
output:
Case #1: 3.000000000 Case #2: 5.000000000 Case #3: 51133.937500000 Case #4: 429262.396142110 Case #5: 129368.012279597 Case #6: 7801.832031250 Case #7: 66656.812500000 Case #8: 607220.690423515 Case #9: 5725896.876344086 Case #10: 129205.285220126 Case #11: 64298.000000000 Case #12: 610881.705159705...
result:
ok correct! (50 test cases)
Subtask #2:
score: 15
Accepted
Test #2:
score: 15
Accepted
time: 2401ms
memory: 7236kb
input:
50 4 3 -3 -6 -9 3 2 1 2 2 1 -1 1 1 1000 500 -9650379 9806301 -6495789 -1283284 5022779 4725553 9364178 -8123302 -9609729 7847458 -142364 6983908 8147008 -3186924 7339254 -8737645 8757174 7887319 3609962 5780915 -1752801 -1657946 -9511339 5113995 -7887160 -6093170 260267 -3837106 -356098 6676924 6210...
output:
Case #1: 3.000000000 Case #2: 5.000000000 Case #3: 205911250.088888889 Case #4: 36298.000000000 Case #5: 186002.250000000 Case #6: 13741948.500000000 Case #7: 109001.125000000 Case #8: 38656.812500000 Case #9: 128881.056148055 Case #10: 8069407.987096774 Case #11: 128881.056148055 Case #12: 124955.3...
result:
ok correct! (50 test cases)
Extra Test:
score: 0
Extra Test Passed