天梯赛选拔赛1补题
目录C 合成闪光百变怪百分号的读入题目代码D 颠倒阴阳二进制转换题目代码F 分鸽子二分查找代码二分练习题1.分巧克力2.分木材什么时候用二分法C 合成闪光百变怪百分号的读入链接https://ac.nowcoder.com/acm/contest/130796/C来源牛客网题目代码#includebits/stdc.h using namespace std; int main() { double p[7]; for (int i0;i7;i) { scanf(%lf%%,pi); //读取带百分号 % 的输入数字 可以正确读进去 50.0 } int c,f; cincf; double ansp[c]; if (f1) { ans*0.01; } else { ans*0.99; } printf(%.2f%%\n,ans); //第一个 % 是转义符 第二个 % 才是真正输出的 % 符号 return 0; }D 颠倒阴阳二进制转换题目碰巧写出来而已代码#includeiostream #includecstdio #includecstring using namespace std; long long sum0,n; int r; long long s; int main() { scanf(%d,n); int i0; while(n0) { rn%2; nn/2; if(r0) { r1; s1; for(int q1;q31-i;q) { s*2; } sums; } else if(r1) { r0; sum0; } i; } printf(%lld,sum); return 0; }F 分鸽子二分查找链接https://ac.nowcoder.com/acm/problem/205725来源牛客网Reverie想要把一些鸽子分给协会里的小伙伴。她有 n 只重量不同的鸽子要分给 m 个小伙伴。每个小伙伴分到的鸽子肉重量要相等并且都是非负整数。一个人分到的鸽子肉不能来自于两只及以上的鸽子因为这样会串味儿。请你帮Reverie计算一下每个小伙伴最多能分到多少鸽子肉。.输入第一行两个正整数 n, m分别表示鸽子的数量和小伙伴的数量。 第二行 n 个正整数表示 n 只鸽子的重量。输出一行内输出一个非负整数表示每个小伙伴分到的鸽子肉重量。代码#includeiostream #includecstdio using namespace std; long long n,m; int a[100005]; bool check(int x); int main() { scanf(%lld%lld,n,m); for(int i1;in;i) { scanf(%d,a[i]); } int l1;int r0x3f3f3f3f;//接近 10^9 的整数 int ans0; while(lr) { int mid(lr)/2; if(check(mid)) { ansmid; lmid1; } else { rmid-1; } } printf(%d\n,ans); return 0; } bool check(int x) { int cnt0; for(int i1;in;i) { cnta[i]/x; if(cntm) { return true; } } return false; }二分练习题1.分巧克力#includeiostream #includecstdio using namespace std; long long n,k; int h[100005],w[100005]; int a[100005]; bool check(int mid); int main() { scanf(%lld%lld,n,k); for(int i1;in;i) { scanf(%d %d,h[i],w[i]); } int l1,r100000; int ans0; while(lr) { int mid(lr)/2; if(check(mid)) { ansmid; lmid1; } else { rmid-1; } } printf(%d,ans); } bool check(int x) { int cnt0; for(int i1;in;i) { cnt(h[i]/x)*(w[i]/x); if(cntk) { return true; } } return cntk; }2.分木材#includebits/stdc.h using namespace std; const int N(int)1e510; int a[N]; int n,m; bool check(int x); int main() { cinnm; for (int i1;in;i) { scanf(%d,ai); } int l1,r0x3f3f3f3f,ans0; while (lr) { int mid(lr)/2; if (check(mid)) { ansmid; lmid1; } else { rmid-1; } } coutansendl; return 0; } bool check(int x) { int cnt0; for (int i1;in;i) { cnta[i]/x; if (cntm) { return true; } } return false; }什么时候用二分法只要同时满足这2 条就用二分答案有范围能写出最小可能最大可能具有单调性答案越大越容易满足条件答案越小越难满足条件