QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#518543 | #5076. Prof. Pang and Ants | zhouhuanyi | WA | 1ms | 5912kb | C++14 | 1.8kb | 2024-08-13 21:50:14 | 2024-08-13 21:50:14 |
Judging History
answer
#include<iostream>
#include<cstdio>
#include<algorithm>
#define N 300000
using namespace std;
long long read()
{
char c=0;
long long sum=0;
while (c<'0'||c>'9') c=getchar();
while ('0'<=c&&c<='9') sum=sum*10+c-'0',c=getchar();
return sum;
}
struct reads
{
long long l,r;
int sz;
};
reads tong[N+1];
int T,n,l,r,a[N+1],length;
long long m,ans;
long long get_rk(long long l,long long r,long long d,long long k)
{
return l+(k+d-1)/d-1;
}
long long calc(long long l1,long long r1,int d1,long long l2,long long r2,int d2)
{
if (d1<=d2) return l1+r2;
else
{
if ((r1-l1+1)*d1>=(r2-l2+1)*d2) return get_rk(l1,r1,d1,(r2-l2)*d2+1)+r2;
else return l2+get_rk(l2,r2,d2,(r1-l1+1)*d1);
}
}
int main()
{
long long ps,d;
int ds;
T=read();
while (T--)
{
n=read(),m=read(),length=1,ans=0;
for (int i=1;i<=n;++i) a[i]=read();
sort(a+1,a+n+1);
for (int i=1;i<=n;++i)
if (m)
{
if (i==n) d=m/i;
else d=min(m/i,(long long)(a[i+1]-a[i]));
tong[++length]=(reads){a[i],a[i]+d-1,i},m-=d*i;
}
if (m) tong[++length]=(reads){a[n],a[n],(int)(m)};
l=2,r=length;
while (l<=r)
{
d=min((tong[l].r-tong[l].l+1)*tong[l].sz,(tong[r].r-tong[r].l+1)*tong[r].sz),ans=max(ans,calc(tong[l].l,tong[l].r,tong[l].sz,tong[r].l,tong[r].r,tong[r].sz));
if (d==(tong[l].r-tong[l].l+1)*tong[l].sz&&d==(tong[r].r-tong[r].l+1)*tong[r].sz) l++,r--;
else if (d==(tong[l].r-tong[l].l+1)*tong[l].sz)
{
l++,tong[r].r-=(d+tong[r].sz-1)/tong[r].sz,ds=d%tong[r].sz;
if (tong[r].l>tong[r].r) r--;
if (ds) ps=tong[r].r+1,tong[++r]=(reads){ps,ps,ds};
}
else
{
r--,tong[l].l+=(d+tong[l].sz-1)/tong[l].sz,ds=d%tong[l].sz;
if (tong[l].l>tong[l].r) l++;
if (ds) ps=tong[l].l-1,tong[--l]=(reads){ps,ps,ds};
}
}
printf("%lld\n",ans+2);
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 5828kb
input:
3 2 4 1 2 3 10 1 2 3 5 1 1 2 3 4 5
output:
6 9 4
result:
ok 3 number(s): "6 9 4"
Test #2:
score: -100
Wrong Answer
time: 1ms
memory: 5912kb
input:
1 1 100000000000000 1000000000
output:
100002000000001
result:
wrong answer 1st numbers differ - expected: '200000000000000', found: '100002000000001'