bzoj 4590: [Shoi2015]自动刷题机
2016-08-03 20:58
309 查看
二分答案sb题。
AC代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
#define inf 100000000000000ll
using namespace std;
int n,m,a[100005];
int calc(ll x){
int i,ans=0; ll sum=0;
for (i=1; i<=n; i++){
sum=max(0ll,sum+a[i]);
if (sum>=x){ sum=0; ans++; }
}
return ans;
}
int main(){
scanf("%d%d",&n,&m);
int i;
for (i=1; i<=n; i++) scanf("%d",&a[i]);
ll l=1,r=inf,mid;
while (l<r){
mid=(l+r)>>1;
if (calc(mid)<=m) r=mid; else l=mid+1;
}
ll x=l; l=1; r=inf;
while (l<r){
mid=(l+r+1)>>1;
if (calc(mid)>=m) l=mid; else r=mid-1;
}
l=x;
if (calc(l)!=m || calc(r)!=m) puts("-1");
else printf("%lld %lld\n",l,r);
return 0;
}
by lych
2016.8.3
AC代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
#define inf 100000000000000ll
using namespace std;
int n,m,a[100005];
int calc(ll x){
int i,ans=0; ll sum=0;
for (i=1; i<=n; i++){
sum=max(0ll,sum+a[i]);
if (sum>=x){ sum=0; ans++; }
}
return ans;
}
int main(){
scanf("%d%d",&n,&m);
int i;
for (i=1; i<=n; i++) scanf("%d",&a[i]);
ll l=1,r=inf,mid;
while (l<r){
mid=(l+r)>>1;
if (calc(mid)<=m) r=mid; else l=mid+1;
}
ll x=l; l=1; r=inf;
while (l<r){
mid=(l+r+1)>>1;
if (calc(mid)>=m) l=mid; else r=mid-1;
}
l=x;
if (calc(l)!=m || calc(r)!=m) puts("-1");
else printf("%lld %lld\n",l,r);
return 0;
}
by lych
2016.8.3
相关文章推荐
- Ticket管理工具:Redmine
- scanf("%c")和getchar
- 夜神模拟器SD卡文件存储位置
- 一个新的开始!
- Asynctask实现源码分析
- 关于DatePicker的理解(显示当前日期和时间)
- Spring Boot实战之定时任务
- Netty(1):第一个netty程序
- Android应用开发SharedPreferences存储数据的使用方法
- Java类加载器总结
- POJ 1125 Stockbroker Grapevine
- 【高性能】Mellanox交换机基本设置
- HTML标签属性总结+页面中模块跳转
- [SBT] mingap
- JAVA中的接口和抽象类
- 索引图像(X与map)的显示、保存、转化
- Python新式类和经典类
- servlet简单介绍
- HDU 1233 还是畅通工程(模板)
- 网络编程(一):网络基础之一