「个人训练」Copying Books(UVa714)
好久不更新主要是怠惰了。。。。还要加强训练。
题意分析与思路
注意到这样一句话:
our goal is to minimize the maximum number of pages assigned to a single scriber. Your task is to find the optimal assignment.
这种最大化最小、最小化最大,显然是二分。
如何二分呢,枚举分成k份中各份的最大值,判断在$max_t$的情况下能否分成$\le k$份,能的话那么我们的$max_t$还能更小,不然就得变大。虽然思路很简单,但是由于不熟练,还是写的满磕磕绊绊的,对状态细节的把握不熟练。
代码
#include <bits/stdc++.h>
#define MP make_pair
#define PB push_back
#define fi first
#define se second
#define ALL(x) (x).begin(),(x).end()
#define ZERO(x) memset((x),0,sizeof(x))
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int p[505],m,k;
bool judge(int threshold)
{
int tmp=p[m],cnt=1;
for(int i=m-1;i>=1;--i)
{
if(tmp+p[i]<=threshold)
{
tmp+=p[i];
}
else
{
cnt++;
tmp=p[i];
}
}
if(cnt<=k) return true;
else return false;
}
int main()
{
int kase; cin>>kase;
while(kase--)
{
cin>>m>>k;
ll l=-1,r=0;
for(int i=1;i<=m;++i)
{
cin>>p[i];
r+=p[i];
l=max(l,(ll)p[i]);
}
while(l<r)
{
int mid=(l+r)/2;
if(judge(mid)) r=mid;
else l=mid+1;
}
int tmp=0,cnt=1;
bool cur[505]; memset(cur,false,sizeof(cur));
//cout<<l<<" "<<r<<endl;
for(int i=m;i>=1;--i)
{
if(i<=k-cnt) { cur[i]=true; cnt++; /*cout<<i<<" set"<<endl;*/ }
else
{
if(tmp+p[i]<=l)
tmp+=p[i];
else
{
//cout<<i<<" put"<<endl;
tmp=p[i];
cur[i]=true;
cnt++;
}
}
}
for(int i=1;i<=m;++i)
{
cout<<p[i];
if(i==m) cout<<endl;
else if(cur[i]) cout<<" / ";
else cout<<" ";
}
}
return 0;
}
「个人训练」Copying Books(UVa714)的更多相关文章
- 高效算法——B 抄书 copying books,uva714
Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Description ...
- 「日常训练」 Fire!(UVA-11624)
与其说是训练不如说是重温.重新写了Java版本的代码. import java.util.*; import java.math.*; import java.io.BufferedInputStre ...
- 「国庆训练」ArcSoft's Office Rearrangement(HDU-5933)
题目与分析 题解见https://blog.csdn.net/cmershen/article/details/53200922. 训练赛场上我们写出来了--在4小时50分钟的时候...激情补题啊.. ...
- 「国庆训练」Bomb(HDU-5934)
题意 给定\(n\)个炸弹,每个炸弹的坐标与代价与影响范围给定,炸弹会引爆影响范围内其他所有炸弹.求引爆所有炸弹的最小代价. 分析 先做\(n^2\)的循环,然后建图,对\(i\)能引爆\(j\)建边 ...
- 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)
题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...
- 「日常训练」COMMON 约数研究(HYSBZ-1968)
题意与分析 感谢https://www.cnblogs.com/Leohh/p/7512960.html的题解.这题话说原来不在我的训练范围,正好有个同学问我,我就拿来做做.数学果然不是我擅长的啊,这 ...
- 「暑期训练」「基础DP」 Common Subsequence (POJ-1458)
题意与分析 很简单:求最长公共子序列. 注意子序列与子串的差别:一个不连续一个连续.一份比较好的参考资料见:https://segmentfault.com/a/1190000002641054 状态 ...
- 「日常训练」 Mike and Fun (CFR305D2B)
题意(CodeForces 548B) 每次对01矩阵中的一位取反,问每次操作后,单列中最长连续1的长度. 分析 非常非常简单,但是我当时训练的时候WA了四次...无力吐槽了,人间 不值得.jpg 代 ...
- 「日常训练」Common Subexpression Elimination(UVa-12219)
今天做的题目就是抱佛脚2333 懂的都懂. 这条题目干了好几天,最后还是参考别人的代码敲出来了,但是自己独立思考了两天多,还是有收获的. 思路分析 做这条题我是先按照之前的那条题目(The SetSt ...
随机推荐
- c#写入配置文件(text)
1.获取当前时间 System.DateTime currentTime = new System.DateTime(); currentTime = System.DateTime.Now; 写入配 ...
- 写一个简单的shellcode
0x00 前言 漏洞利用中必不可缺的部分就是shellcode,不会编写shellcode和咸鱼有什么区别,跳出咸鱼第一步. 0x01 系统调用 通过系统调用execve函数返回shell C语言实现 ...
- axios简单了解
简单介绍 axios是基于客户端的promise,面向浏览器和nodejs 特色 浏览器端发起XMLHttpRequests请求 node端发起http请求 支持Promise API 监听请求和返回 ...
- Several ports (8005, 8080, 8009) required by Tomcat v8.5 Server at localhost are already in use. The server may already be running in another process, or a system process may be using the port. To sta
eclipse出现:Several ports (8005, 8080, 8009) required by Tomcat v8.5 Server at localhost are already i ...
- css的基础用法(下)
定位: <html> <head> <meta charset="utf-8" /> <title>定位</title> ...
- Redis集群的安装和使用
- Question 20171115 String&&StringBuffer&&StringBuilder的区别与联系?
Question 20171114 String&&StringBuffer&&StringBuilder的区别和联系 创建成功的String对象,其长度是固定的,内容 ...
- NEC css规范
CSS规范 - 分类方法 SS文件的分类和引用顺序 通常,一个项目我们只引用一个CSS,但是对于较大的项目,我们需要把CSS文件进行分类. 我们按照CSS的性质和用途,将CSS文件分成“公共型样式”. ...
- Ajax之404,200等查询
xmlhttp.readyState的值及解释: 0:请求未初始化(还没有调用 open()). 1:请求已经建立,但是还没有发送(还没有调用 send()). 2:请求已发送,正在处理中(通常现在可 ...
- 【ospf-链路验证】
根据项目需求搭建好拓扑图 配置RT1的环回口IP和G0/0/0IP地址 开启RT1接口ospf认证,配置接口密码为H3C 配置RT1的ospf区域 同理 开启RT2接口ospf认证,配置接口密码为g0 ...