hdu 6205
来源:互联网 发布:甘肃干部网络考试答案 编辑:程序博客网 时间:2024/06/06 00:05
一开始想麻烦了;
可以用尺取法做,为o(n);
在群里一个buaa的聚聚说了一种思路,可以用优先队列做,思想很好;
先复制一遍,对于答案x,你要找满足prea[t]-prea[x]-(prea[t]-prea[x])<0的最小t;
移项就是t<x;
就直接单调队列,找每个数右边第一个比他小的;
q神说,这个题有个前提,sum a=sum b;
一定存在一个位置能把所有牌取走;这样就只需判断是否长度为n就行
我思考了一下sum a!=sum b的情况下的代码
代码如下
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int maxn=1e6+5;int a[2*maxn];int b[2*maxn];int main(){ int n; while(~scanf("%d",&n)){ for(int i=0;i<n;i++){ scanf("%d",&a[i]); a[i+n]=a[i]; } for(int i=0;i<n;i++){ scanf("%d",&b[i]); b[i+n]=b[i]; } int maxa=0,maxb=0,s=0,e=0; int p=0,ma=0; for(;;){ while(maxa>=maxb&&e-s<n){ maxa+=a[e]; maxb+=b[e]; e++; } if(maxa>ma){ p=s; ma=maxa; } if(e-s==n||e>2*n-1||s>n) break; maxa-=a[s]; maxb-=b[s]; s++; } printf("%d\n",p); } }
阅读全文
0 0
- hdu 6205
- HDU 6205 模拟题
- HDU 6205 贪心
- HDU 6205 前缀和
- HDU 6205 思维
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- Android视频播放学习笔记
- 微信 iOS 收款到帐语音提醒开发总结
- 6、SONIX单片机外部输入中断
- codevs3117 高精度乘法
- mybatis 批量插入oracle
- hdu 6205
- 前后端基本通信
- 编辑文章
- Shader学习之Cg语言四(输入\输出与语义绑定)
- TextView设置为只显示一行文字对显示不完的用省略号替代
- 网站导航栏优化的重要性
- db2锁表解锁方法
- 0.大纲
- VS2010下的银行管理系统