动态图网站怎么做dw,网站 开发 成本,兼职 网站建设,哪个网站做淘宝客最合适问题#xff1a;1561. 买木头
类型#xff1a;省赛、数组问题、二分答案、贪心、2015江苏省青少年信息学奥林匹克竞赛复赛 题目描述#xff1a;
有 n 个木材供应商#xff0c;每个供货商有长度相同一定数量的木头。长木头可以锯短#xff0c;但短木头不能接长。有一个客…问题1561. 买木头
类型省赛、数组问题、二分答案、贪心、2015江苏省青少年信息学奥林匹克竞赛复赛 题目描述
有 n 个木材供应商每个供货商有长度相同一定数量的木头。长木头可以锯短但短木头不能接长。有一个客人要求 m 根长度相同的木头。要求计算出此时供货商提供的木头满足客人要求的最长的长度是多少。 例如 n2,m30两个供货商的木头为 12,10 第 1 个供货商的木头长度为 12 共有 10 根 5,10 第 2 个供货商的木头长度为 5 共有 10 根。 计算的结果为 5 即长度为 12 的木头一根可锯出两根长度为 5 的木头多余的无用长度为 5 的木头不动此时可得到 30 根长度为 5 的木头。
输入
整数 n,m,L1,S1 1≤n≤10000,1≤m≤1000000,1≤L1≤10000,1≤S1≤100 其中 L1 是第一个供货商木头的长S1 是第一个供货商木头数量。其他供货商木头的长度和数量 Li 和 Sii≥2由下面的公式给出 Li((Li−1×3701110193)mod10000)1 Si((Si−1×7301124793)mod100)1
输出
一个整数即满足要求的 m 根长度相同的木头的最大长度。
样例
输入
10 10000 8 20输出
201完整代码如下
#includebits/stdc.h
using namespace std;int m,cmax0;
vectorint v;bool cmp(int a,int b){return ab;
}int findNum(int mid){int c0,t;for(int i0;iv.size();i){tv[i];while(tmid){c;t-mid;} }return c;
}void myFind(int l,int r){if(lr){return;}int mid;midlr1;if(mfindNum(mid)){return myFind(l,mid-1);}else{cmaxmid;return myFind(mid1,r);}}
int main(){//一、分析问题//已知有n个木材供应商。需要m 根长度相同的木头。L 是第一个供货商木头的长S是第一个供货商木头数量。 //未知供货商提供的木头满足客人要求的最长的长度是多少。//关系长木头可以锯短但短木头不能接长。其他供货商木头的长度和数量 Li 和 Sii≥2由下面的公式给出//Li((Li-1×3701110193)mod10000)1//Si((Si-1×7301124793)mod100)1//二、数据定义 int n,li,si;//三、数据输入cinnmlisi; for(int i0;in;i){for(int j0;jsi;j){v.push_back(li);} li(li*3701110193)%100001;si(si*7301124793)%1001;}//四、数据计算 sort(v.begin(),v.end(),cmp);myFind(1,v[0]);//五、输出结果 coutcmax;return 0;
}