二分答案
bool C(double x)
{
int num=0;
for (i=0; i<n; i++)
num+=l[i]/x;
return num>=k
}
l=0;
r=INF;
for (i=0; i<=100; i++)
{
double mid=(l+r)/2;
if (C(mid))
l=mid;
else
r=mid;
}
printf("%.2f\n",floor(l*100)/100);
bool C(int d)
{
int l=0;
for (i=1; i<m; i++)
{
int k=l+1;
while(k<n&&x[k]-x[l]<d)
{
k++;
}
if (k==n)
return 0;
l=k;
}
return 1;
}
sort(x,x+n);
l=0;
r=INF;
while (r-l>1)
{
int mid=(l+r)>>1;
if (C(mid))
l=mid;
else
r=mid;
}
printf("%d\n",l);
bool C(double x)
{
for (int i=0; i<n; i++)
{
y[i]=v[i]-x*w[i];
}
sort(y,y+n);
double sum=0;
for (int i=0; i<k; i++)
sum+=y[n-i-1];
return sum>=0;
}
l=0;
r=INF;
for (int i=0; i<=100; i++)
{
double mid=(l+r)/2;
if (C(mid))
l=mid;
else
r=mid;
}
printf("%.2f\n",l);
for (i=0; i<n; i++)
{
sum[i+1]=sum[i]+a[i];
}
if (sum[n]<S)
{
printf("0\n");
return 0;
}
ans=n;
for (s=0; sum[s]+S<=sum[n]; s++)
{
int t=lower_bound(sum+s,sum+n,sum[s]+S)-sum;
ans=min(ans,t-s);
}
printf("%d\n",ans);
int ans=n+1;
while (1){
while (t<n&&sum<S){
sum+=a[t++];
}
if (sum<S) break;
ans=min(ans,t-s);
sum-=a[s++];
}
if (ans>n){
ans=0;
}
printf("%d\n",ans);
set<int>all;
for (i=0; i<p; i++)
{
all.insert(a[i]);
}
n=all.size();
map<int,int>c;
ans=p;
while (1)
{
while (t<p&&num<n)
{
if (c[a[t++]]++==0)
{
num++;
}
}
if (num<n)
break;
ans=min(ans,t-s);
if (--c[a[s++]]==0)
{
num--;
}
}
printf("%d\n",ans);
for (i=0; i<n; i++)
for (j=0; j<n; j++)
cd[i*n+j]=c[i]+d[j];
sort(cd,cd+n*n);
for (i=0; i<n; i++)
for (j=0; j<n; j++) {
k=-a[i]-b[j];
ans+=upper_bound(cd,cd+n*n,k)-lower_bound(cd,cd+n*n,k);
}
printf("%d\n",ans);
pair<ll,ll>p[1<<(maxn/2)];// (重量, 价值)
n2=n/2;
for (i=0; i<1<<n2; i++) {
ll sw=0,sv=0;
for (j=0; j<n2; j++) {
if (i>>j&1) {
sw+=w[j];
sv+=v[j];
}
}
p[i]=make_pair(sw,sv);
}
// 去除多余的元素
sort(p,p+(1<<n2));
m=1;
for (i=1; i<(1<<n2); i++) {
if (p[m-1].second<p[i].second) {
p[m++]=p[i];
}
}
// 枚举后半部分并求解
ans=0;
for (i=0; i<(1<<(n-n2)); i++) {
ll sw=0,sv=0;
for (j=0; j<n-n2; j++) {
if (i>>j &1) {
sw+=w[n2+j];
sv+=v[n2+j];
}
}
if (sw<=W) {
t=(lower_bound(p,p+m,make_pair(w-sw,INF))-1)->second;
ans=max(ans,sv+tv);
}
}
printf("%d\n",ans);