您的位置:首页 > 其它

Codeforces Round #311

2015-07-01 18:51 288 查看
昨天晚上的Codeforces 写的有点逗,无状态呀~

A题:

题意:满足三个条件的等级数量分配,尽量让一级的最多,二等其次,输出答案 。

暴力

const int maxn=1000+5;
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int a,b,c;
int aa,bb,cc;
cin>>a>>aa>>b>>bb>>c>>cc;
for(int i=aa;i>=a;i--)
{
int yu=n-i;
if(yu<(b+c))continue;
for(int j=bb;j>=b;j--)
{
int d=yu-j;
if(d>=c&&d<=cc)
{
cout<<i<<" "<<j<<" "<<d<<endl;
return 0;
}
}
}

}
return 0;
}


B题:

题意:给n个男生和给n个女生倒水,给你2*N个杯子的容量,倒水的总量不超过W,求最多倒水。

解法:二分判断

判断是否总量小于w,并且杯子容量够用,当然排序后,只需要判断w[0]是否满足女生,w
是否满足男生就可以了。

我的写法要控制二分的次数,否则会T掉

const int maxn=200000+5;
using namespace std;
const double eps=1e-12;
double a[maxn];
int n;
double w;
int getbool(double x)
{
if(3*n*x>w)return false;
if(a[0]<x)return false;
if(a
<2*x)return false;
return true;
}
int main()
{
while(cin>>n>>w)
{
for(int i=0;i<2*n;i++)
{
scanf("%lf",&a[i]);
}
sort(a,a+2*n);
double  ans=0;
int num=0;
double l=0;double r=w*3.0;
while(r-l>=eps)
{
num++;if(num>10000000)break;
double mid=(r+l)/2.0;
if(getbool(mid))
{
l=mid;
ans=mid;
}
else r=mid;
}
ans=ans*3.0*(double)n;
printf("%.8lf\n",ans);
}
return 0;
}


C题:

题意:砍掉一些桌子腿,是桌子稳固,稳固的条件,1:最长的腿数量最多 2:最长的腿数量占一半以上

解法:贪心

答案肯定是某种长度的腿全部留下,个数为len个,还可以保留len-1个长度比选择的腿短的,贪心选择花费最大的就好了。题中给出的花费<=200,所以暴力200进行选择就好了。

#define ll long long
const int maxn=100000+5;
using namespace std;
int n;
struct node
{
int l,d;
}a[maxn];
int b;
bool cmp(node a,node b)
{
return a.l<b.l;
}
int main()
{
while(cin>>n)
{
b=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i].l);
}
for(int i=0;i<n;i++)
{
scanf("%d",&a[i].d);
b+=a[i].d;
}
sort(a,a+n,cmp);
int ans=0x5fffffff;
int num[250];
memset(num,0,sizeof(num));
for(int i=0;i<n;i++)
{
int len=0;
int sum=0;
for(;i<n;i++)
{
sum+=a[i].d;len++;
if((i+1)<n){
if(a[i].l!=a[i+1].l)break;
}
else break;
}
int t=len-1;
for(int j=200;j>=1;j--)
{
if(t<=num[j]){
sum+=(t*j);
break;
}
else{
t-=num[j];
sum+=(num[j]*j);
}
}
for(int j=0;j<len;j++)
{
num[a[i-j].d]++;
}
ans=min(ans,b-sum);
}
cout<<ans<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: