【BZOJ2600】【IOI2011】ricehub 二分答案
来源:互联网 发布:stc单片机的J什么意思 编辑:程序博客网 时间:2024/06/04 23:26
转载请注明出处【V字弦割】谢谢:http://blog.csdn.net/vmurder/article/details/42968083
话说只删除网址却留下了这两句话的是什么心态233
题意 : 见题目。
题解:
二分答案,然后对于一个ans,它显然是取了连续的一段。
然后这个连续的一段显然一定是取中位数那个稻田作为粮仓。
然后显然可以区间快速转移。
然后显然这是一道水题,显然他需要开long long。
显然如果你还不懂的话可以留言问。
代码:
<span style="font-family:KaiTi_GB2312;font-size:18px;">#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define N 101000using namespace std;int n,m;long long p;int pos[N];bool check(int len){int i,l,r,mid;long long now=0;l=1,r=len,mid=l+r>>1;for(i=l;i<mid;i++)now+=(pos[mid]-pos[i]);for(i=mid+1;i<=r;i++)now+=(pos[i]-pos[mid]);if(now<=p)return true;for(;r<n;){now-=(pos[mid]-pos[l++]);now+=(pos[++r]-pos[mid]);mid=l+r>>1;now+=(pos[mid]-pos[mid-1])*(mid-l);now-=(pos[mid]-pos[mid-1])*(r-mid+1);if(now<=p)return true;}return false;}int main(){freopen("test.in","r",stdin);scanf("%d%d%lld",&n,&m,&p);for(int i=1;i<=n;i++)scanf("%d",&pos[i]);int l=1,r=n,mid,ans=0;while(l<r){if(r-l<=3){for(int i=l;i<=r;i++)if(check(i))ans=i;break;}mid=l+r>>1;if(check(mid))l=mid;else r=mid-1;}printf("%d\n",ans);return 0;}</span>
0 0
- 【BZOJ2600】【IOI2011】ricehub 二分答案
- 【IOI2011】【BZOJ2600】ricehub
- bzoj2600 ricehub 二分
- IOI2011 ricehub
- 【bzoj2660】【IOI2011】【ricehub】
- BZOJ 2600/IOI2011 ricehub
- BZOJ P2600[IOI2011] ricehub
- bzoj 2600 [Ioi2011] ricehub 题解
- BZOJ 2600 IOI2011 ricehub 中位数
- BZOJ 2600: [Ioi2011]ricehub 中位数
- 2600: [Ioi2011]ricehub 前缀和乱搞
- BZOJ 2600: [Ioi2011]ricehub|暴力|中位数
- BZOJ 2600 IOI 2011 ricehub 二分
- 二分答案
- 二分答案
- 二分答案
- 二分答案
- ~二分答案~
- redis 数据类型(五) zset sorted sets的使用
- javascript 自定义动画函数
- ETL
- 织梦DedeCMS模板通用安装方法
- Android——实现像handcent sms或者chomp sms那样的气泡短信样式
- 【BZOJ2600】【IOI2011】ricehub 二分答案
- c语言可变参数列表处理
- Android Home键按键事件监听
- 在VC中调用WORD(显示,修改,存盘,运行宏)
- 比较iOS类别Category和扩展Extension以及runtime的associative(关联)机制(容我水一发)
- win7系统
- MySQL修改root密码的多种方法
- sqlite数据库查询结果过大解决办法
- \r和\n的区别