题目要求从n个人中选取一部分或全部分为两组,使一组的最小值大于另一组的最大值;
我们可以将这n个数据进行从小到大排序,然后按随机取出M个(也是从小到大的顺序),则这M个人 按顺序分为两组即满足题意.也就是类似于我们高中数学当中的插挡板问题(可以这么理解吧)
ac代码~~~:
#include<stdio.h>
long long C(long long m,long long n)
{ long long i,s=1;
for(i=1;i<=m;i++)
s=s*(n-i+1)/i;
return s;
}
int main()
{ long long n,i;
while(scanf("%lld",&n)!=EOF)
{ long long ans=0;
for(i=2;i<=n;i++)
{ ans+=(i-1)*C(i,n);
}
printf("%lld\n",ans);
}
return 0;
}
还望各路大神指教代码~~~
今日的我要超越昨日的我,明日的我要胜过今日的我,
以创作出更好的代码为目标,不断地超越自己。
我们可以将这n个数据进行从小到大排序,然后按随机取出M个(也是从小到大的顺序),则这M个人 按顺序分为两组即满足题意.也就是类似于我们高中数学当中的插挡板问题(可以这么理解吧)
ac代码~~~:
#include<stdio.h>
long long C(long long m,long long n)
{ long long i,s=1;
for(i=1;i<=m;i++)
s=s*(n-i+1)/i;
return s;
}
int main()
{ long long n,i;
while(scanf("%lld",&n)!=EOF)
{ long long ans=0;
for(i=2;i<=n;i++)
{ ans+=(i-1)*C(i,n);
}
printf("%lld\n",ans);
}
return 0;
}
还望各路大神指教代码~~~
今日的我要超越昨日的我,明日的我要胜过今日的我,
以创作出更好的代码为目标,不断地超越自己。