bzoj 1816: [Cqoi2010]扑克牌
2024-08-25 20:36:47
#include<cstdio>
#include<iostream>
using namespace std;
int l,r,m,n,a[],ans;
bool pan(int x)
{
int a1=min(x,m);
for(int i=;i<=n;i++)
if(a[i]<x)
{
a1-=x-a[i];
if(a1<)
return ;
}
return ;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
l=;
r=;
for(;l<=r;)
{
int mid=(l+r)>>;
if(pan(mid))
{
l=mid+;
ans=mid;
}
else
r=mid-;
}
printf("%d\n",ans);
return ;
}
二分答案判断是否可行。
其实我还有一种想法,只是一直没对,以后要对拍一下。
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
long long a[],n,m,sum,q1=0x7ffffffffLL,q2=0x7ffffffffLL;
bool f;
int main()
{
scanf("%lld%lld",&n,&m);
for(int i=;i<=n;i++)
scanf("%lld",&a[i]);
sort(a+,a+n+);
for(int i=;i<=n;i++)
{
if(m-(i-)*(a[i]-a[i-])<)
{
f=;
q1=m/(i-)+a[i-];
}
m-=(i-)*(a[i]-a[i-]);
if(sum+(i-)*(a[i]-a[i-])>a[i])
{
f=;
q2=(sum-(i-)*a[i-])/(-i);
}
if(f)
break;
sum+=(i-)*(a[i]-a[i-]);
}
printf("%lld",min(a[n],min(q1,q2)));
return ;
}
最新文章
- CSS margin详解
- Actor模型前奏
- 瘋子C语言笔记(指针篇)
- C++/C互相调用
- 4.1---二叉树是否平衡(CC150)
- 手机页面的meta标签
- C++一个简单的类
- 二模 (3) day2
- mini6410-JNI-led
- 截取字符串一之substr
- Tomcat access log配置
- 使用scrapy爬虫,爬取起点小说网的案例
- openstack项目【day23】:keystone组件HTTP协议
- C语言的“编译、链接”
- 【BZOJ3874】[AHOI&;JSOI2014]宅男计划(贪心,三分)
- springboot13 发布和监听事件
- Spring Cloud配置中心(Config)
- HTML页面滚动时获取离页面顶部的距离2种实现方法
- cb &;&; cb() 和 a || {}
- ELK日志平台