2013-team5/andrew/13/B
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
{{{
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,a[2014];
int main(){
freopen("bandits.in","r",stdin);
freopen("bandits.out","w",stdout);
scanf("%d%d",&n,&m);
a[1]=m; a[2]=-1;
int i,j,k;
for (i=3; i<=n; i++){
sort(a+1,a+i);
int sum=0,v=i/2+1;
for (int j=1; j<v; j++) sum+=a[j];
sum+=v-1;
if (sum>m){ a[i]=-1; continue; }
k=v;
while (k>1 && a[k-1]==a[k]) k--;
for (j=k; j<i; j++) a[j]=0;
for (j=1; j<k; j++) a[j]++;
a[i]=min(m,m-sum);
}
printf("%d\n",a[n]);
return 0;
}
}}}
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,a[2014];
int main(){
freopen("bandits.in","r",stdin);
freopen("bandits.out","w",stdout);
scanf("%d%d",&n,&m);
a[1]=m; a[2]=-1;
int i,j,k;
for (i=3; i<=n; i++){
sort(a+1,a+i);
int sum=0,v=i/2+1;
for (int j=1; j<v; j++) sum+=a[j];
sum+=v-1;
if (sum>m){ a[i]=-1; continue; }
k=v;
while (k>1 && a[k-1]==a[k]) k--;
for (j=k; j<i; j++) a[j]=0;
for (j=1; j<k; j++) a[j]++;
a[i]=min(m,m-sum);
}
printf("%d\n",a[n]);
return 0;
}