首页 > 其他分享 >BOOKS1 - Copying Books

BOOKS1 - Copying Books

时间:2024-09-27 20:25:09浏览次数:7  
标签:cnt int ll mid -- Books BOOKS1 Copying sum

很显然看到要求最大值最小就可以想到二分答案,然后依次判断长度是否合法。

这题的输出比较特殊越靠前的区间长度越小,所以我们要将最后得到的答案从后向前依次划分区间即可。

#include <bits/stdc++.h>
#define ll long long 
using namespace std;
const int N=510; 
int t;
int n,k;
int a[N];

int check(int x){
	ll sum=0;
	int cnt=1;
	for(int i=1;i<=n;i++){
		if(sum+a[i]<=x){
			sum+=a[i];
		}
		else{
			sum=a[i];
			cnt++;
		}
	}
	return cnt<=k;
} 
int p[N];
void print(int x){
	ll sum=0;
	int cnt=k;
	memset(p,0,sizeof p);//标记是否需要划分 
	
	for(int i=n;i>=1;i--){//从后向前划分 
		if(cnt>i){
			p[i]=1;
			cnt--;
		}
		else if(a[i]+sum>x){
			sum=a[i];
			p[i]=1;
			cnt--;
		}
		else{
			sum+=a[i];
		}
	}
	
	for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
		if(p[i]){
			cout<<"/ ";
		}
	}
	cout<<"\n";
}

int main() {
    ios::sync_with_stdio(false);
    cin>>t;
    while(t--){
    	cin>>n>>k;
		
		ll l=0,r=0;
		for(int i=1;i<=n;i++){
			cin>>a[i];
			l=max(l,(ll)a[i]);//最小的答案也不能小于最大的a[i] 
			r+=a[i];//最大的答案是长度总和
		}
    	while(l<=r){
    		int mid=(l+r)>>1;
    		if(check(mid)){
    			r=mid-1;
			}
			else{
				l=mid+1;
			}
		}
//    	cout<<l<<"\n";
    	print(l);
	}
    return 0;
}

标签:cnt,int,ll,mid,--,Books,BOOKS1,Copying,sum
From: https://www.cnblogs.com/sadlin/p/18436488

相关文章

  • BookStack在线文档管理系统本地Docker部署与远程访问详细教程
    ......
  • FreeBSD books
    https://forums.freebsd.org/threads/some-books-materials-for-getting-started-with-freebsd.90536/https://forums.freebsd.org/threads/freebsd-development-books-papers-slides.1566/#post-9566   Tobegin withFreeBSD,thebestBOOKisstillAnneliseAnde......
  • 经济法人 the 500 highest ranked books
    来源:https://www.economist.com/interactive/graphic-detail/2024/07/26/how-long-would-it-take-to-read-the-greatest-books-of-all-time [{"title":"OneHundredYearsofSolitude","author_creation_year":"Gabriel......
  • C. Binary String Copying
    原题链接题解假如两个区间经过操作之后得到的字符串一样,说明不规则仅出现在两个区间的重合处code#include<bits/stdc++.h>#definelllonglongusingnamespacestd;intl0[200005]={0};intr1[200005]={0};voidsolve(){intn,m;cin>>n>>m;strings;......
  • B. Shaass and Bookshelf
    原题链接题意挑选一部分书放第一层,另一部分放第二层,要求第二层的宽度不超过第一层的长度,实施对于同一长度的第一层,第一层的宽度和越大,第二层宽度和越小,因此以长度为容量,宽度为价值跑背包数组细节滚动数组要注意更新的方向!!code#include<bits/stdc++.h>#definelllonglon......
  • google books api 获取图书信息
    如何获取图书的信息,google提供了获取图书信息的api. https://www.googleapis.com/books/v1/volumes?q=isbn:9781492097334https://www.googleapis.com/books/v1/volumes?q=isbn:9781498711395返回JSON格式的信息:{"kind":"books#volumes","totalItems":1,......
  • CSS 权威指南 第4版 (it-ebooks)高清电子版阅读
    书:pan.baidu.com/s/1rBHxL2rPDZHMMiXRpWBefA提取码:393j我的阅读笔记CSS基础知识: 书中涵盖了CSS的基本概念,包括选择器、盒模型、布局、浮动等。CSS3新特性: 针对CSS3的新特性,包括过渡(transitions)、变换(transforms)、动画(animations)等进行了详细的讲解。响应式设计: 介绍了响......
  • Graph Theory books and authors
    图论大师:JohnAdrianBondy写了两本图论巨著:GraphTheorywithApplicationsJohnAdrianBondyNorthHollandGraphTheoryAdrianBondy,U.S.R.MurtySpringer  https://www.iro.umontreal.ca/~hahn/IFT3545/https://www.iro.umontreal.ca/~hahn/法语 http://www.ma......
  • becoming a Linux Kernal Hacker (books recommended)
    UnderstandingtheLinuxKernel,ThirdEdition3rdEditionbyDanielBovet(Author),MarcoCesati(Author)https://www.amazon.com/Understanding-Linux-Kernel-Third-Daniel/dp/0596005652/UnderstandingLinuxNetworkInternals:GuidedTourtoNetworkingonLinu......
  • P2676 [USACO07DEC] Bookshelf B
    1.题目介绍[USACO07DEC]BookshelfB题目描述FarmerJohn最近为奶牛们的图书馆添置了一个巨大的书架,尽管它是如此的大,但它还是几乎瞬间就被各种各样的书塞满了。现在,只有书架的顶上还留有一点空间。所有\(N(1\leN\le20,000)\)头奶牛都有一个确定的身高\(H_i(1\leH_i......