714 - Copying Books

来源:互联网 发布:地信算法及代码 编辑:程序博客网 时间:2024/06/08 15:22
描述:采用二分+贪心策略,找出范围值,然后从后往前找就行“/”的位置判断#include <cstdio>#include <cstdlib>int num[510],score[510];int main(){    //freopen("a.txt","r",stdin);    int n,m,t,k;    long long v,sum,max,count;    scanf("%d",&t);    while(t--)    {        scanf("%d %d",&n,&m);        sum=v=0;        int i=0;        for(; i<n; i++)        {            scanf("%d",&num[i]);            v=v<num[i] ? num[i] : v ;            sum+=num[i];        }        while(1)        {            max=(v+sum)/2;            if(max==v) break;            for(i=count=k=0; i<n; i++)            {                if(count+num[i]>max)                {                    k++;                    if(k==m) break;                    count=0;                }                count+=num[i];            }            if(i==n) sum=max;            else v=max;        }        v=0;        for(count=0,k=m-1,i=n-1; i>=0; i--)        {            if(count+num[i]>sum||i==k-1)            {                --k;                score[v++]=i;                count=0;            }            count+=num[i];        }        for(v=v-1,i=0; i<n; i++)        {            if(!i) printf("%d",num[i]);            else printf(" %d",num[i]);            if(v>=0&&score[v]==i)            {                printf(" /");                v--;            }        }        printf("\n");    }    return 0;}

原创粉丝点击