洛谷 P2440 木材加工【基础二分】】的更多相关文章

P2440 木材加工 题目背景 要保护环境 题目描述 题目描述: 木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有 剩余),需要得到的小段的数目是给定的.当然,我们希望得到的小段木头越长越好,你的任务 是计算能够得到的小段木头的最大长度.木头长度的单位是cm.原木的长度都是正整数, 我们要求切割得到的小段木头的长度也是正整数. 例如有两根原木长度分别为11和21,要求切割成到等长的6段,很明显能切割出来的小段木头长度最长为5. 输入输出格式 输入格式: 输入: 第一行…
题目链接:https://www.luogu.org/problemnew/show/P2440 题目描述 木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有 剩余),需要得到的小段的数目是给定的.当然,我们希望得到的小段木头越长越好,你的任务 是计算能够得到的小段木头的最大长度.木头长度的单位是cm.原木的长度都是正整数, 我们要求切割得到的小段木头的长度也是正整数. 例如有两根原木长度分别为11和21,要求切割成到等长的6段,很明显能切割出来的小段木头长度最长为5.…
https://www.luogu.org/problem/show?pid=2440#sub 题目背景 要保护环境 题目描述 题目描述: 木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有 剩余),需要得到的小段的数目是给定的.当然,我们希望得到的小段木头越长越好,你的任务 是计算能够得到的小段木头的最大长度.木头长度的单位是cm.原木的长度都是正整数, 我们要求切割得到的小段木头的长度也是正整数. 例如有两根原木长度分别为11和21,要求切割成到等长的6段,很明显能…
#include <iostream>#include <cstring>using namespace std;const int N = 1e5 + 100;int a[N],n,k;bool ok(int x){ int num = 0; for(int i=1;i<=n;i++) { num = num + a[i] / x; } //cout << num << endl; if(num >=k) return true; else r…
P2680 运输计划 题目背景 公元 20442044 年,人类进入了宇宙纪元. 题目描述 公元20442044 年,人类进入了宇宙纪元. L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条航道建立在两个星球之间,这 n-1n−1 条航道连通了 LL 国的所有星球. 小 P 掌管一家物流公司, 该公司有很多个运输计划,每个运输计划形如:有一艘物流飞船需要从 u_iui​ 号星球沿最快的宇航路径飞行到 v_ivi​ 号星球去.显然,飞船驶过一条航道是需要时间的,对于航道 jj,任意飞船驶…
题目链接 忘情水二分模板题,最优解对划分段数的导数满足单调性(原函数凸性)即可使用此方法. 详细题解洛谷里面就有,不啰嗦了. 二分的临界点让人有点头大... #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef double db; ,inf=0x3f3f3f3f3f3f3f3f; ll n,m,hd,tl,a[N],S[N],dp[N],cnt[N]; struct P {ll x,y,c;} q…
P2440 木材加工 要保护环境 题目描述 题目描述: 木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有 剩余),需要得到的小段的数目是给定的.当然,我们希望得到的小段木头越长越好,你的任务 是计算能够得到的小段木头的最大长度.木头长度的单位是cm.原木的长度都是正整数, 我们要求切割得到的小段木头的长度也是正整数. 例如有两根原木长度分别为11和21,要求切割成到等长的6段,很明显能切割出来的小段木头长度最长为5. 输入输出格式 输入格式: 输入: 第一行是两个正整…
题目链接:https://www.luogu.org/problem/P3957 这道题目我用到了如下算法: 线段树求区间最大值: 二分答案: DP求每一次枚举答案g时是否能够找到 \(\ge k\) 的解法. 我们一开始用 \(x[i]\) 和 \(s[i]\) 来表示到起点的距离以及第 \(i\) 个点的分值. 与此同时我们还要算上我们的起点,它满足性质 \(x[0] = s[0] = 0\) ,我们接下来的判断都是建立在这 \(1 + n\) 个点的基础上的. check(g) 首先,我们…
题意 题目链接 Sol 首先一种方案的期望等于它一次排好的概率的倒数. 一次排好的概率是个数数题,他等于一次排好的方案除以总方案,也就是\(\frac{\prod cnt_{a_i}!}{(n+m)!}\).因为最终的序列是一定的,两个序列不同当且仅当权值相同的数排列方式不同. 他的期望为\(\frac{(n+m)!}{\prod cnt_i!}\),我们希望这玩意儿尽量大,也就是下面的尽量小 显然对于每个\(cnt\)来说,最大值越小越好,可以直接二分,然后check一下是否可行. 具体的贪心…
思路:这里就要看往那边贪心了,因为解决的是最大值最小化,最小值最大化.也就是说当满足大于等于c时,l=mid+1这样的二分得到的就是在所有满足条件函数下的最右端. #include<iostream> #include<algorithm> using namespace std; #define ll long long ; int a[maxn], n, maxx, ans; ll c, mid; bool check(ll x){ ll sum = ; ; i <= n…