码迷,mamicode.com
首页 > 其他好文 > 详细

UVa 714,Copying Books

时间:2014-10-20 20:47:36      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   for   sp   

最大值最小化

1A

要用long long,因为计算sum的时候int会超。  

值得一提的是,给的第二组样例很好。二分找到解后k有可能用不完。

如果有多解,s(1)应该尽量小,换句话说也就是s(2)要最大,利用栈倒序输出解决问题。

bubuko.com,布布扣
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <stack>
#include <cstring>
#define maxn 500+10
using namespace std;
long long m,k;
long long maxx,minx;
long long a[maxn],sum[maxn];
long long init(){
    cin>>m>>k;
    memset(a,0,sizeof(a));
    memset(sum,0,sizeof(sum));//sum[i],前i项的和 
    minx=0;
    for (long long i=1;i<=m;i++)
        {cin>>a[i];sum[i]+=sum[i-1]+a[i];minx=max((long long)minx,a[i]);}
    maxx=sum[m];
}
long long work(long long x){
    long long last=0;
    long long t=k;
    for (long long i=1;i<=m;i++){
        if (sum[i]-sum[last]<=x&&i<m)    continue;
        if (i==m&&sum[i]-sum[last]>x&&t==1) return 0;
        t--;
        last=i-1;
    }
    if (t<0) return 0;
        else return 1;
}
long long printf(long long x){
    long long f=0;
    long long t=k-1;
    stack<long long> stk;
    long long i=m;
    while(i>0){
        f+=a[i];
        if (f>x){
            stk.push(0);
            f=a[i];
            t--;
        }
        stk.push(a[i]);
        i--;
    }
    cout<<stk.top();
    stk.pop();
    while (!stk.empty()){
        long long u=stk.top();
        stk.pop();
        if (!u) cout<<" /";
            else if (t&&stk.top()) {
                t--;
                cout<<" "<<u;
                cout<<" /";
            }
            else cout<<" "<<u;
    }    
    cout<<endl;
}
int main()
{
    long long T;
    long long x;
    cin>>T;
    while (T--){
        init();
        while ((maxx-minx)>1){//二分查找 
            x=(minx+maxx)/2;
            if (work(x)) maxx=x;
                else minx=x; 
        }
        printf(maxx);
    }
}
//uva 714
View Code

 

UVa 714,Copying Books

标签:style   blog   http   color   io   os   ar   for   sp   

原文地址:http://www.cnblogs.com/bingolibing/p/4038333.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!