[校内模拟赛T3]火花灿灿_二分答案_组合数学_贪心
火花灿灿
题目:

数据范围:

题解:
这个题真的是个神仙题。
我们对于每块石头维护一个$01$串。
这个$01$串的长度是操作次数。
如果$01$串的当前位是$1$,表示这次操作中当前石子被划分到了贡献当中,就是被划分到了$b_i$中。
那么如果所有的石子都单独一堆,必定是所有的$01$串都互不相同。
而且有一个限制就是每一列最多$m$个。
显然$01$的长度具有单调性。
故此二分答案之后考虑怎么验证。
我们相当于在一个$n\times mid$的棋盘上添$1$使得满足要求。
首先有一个贪心,就是对于每一行来讲,能添$k$个数绝对不填$k + 1$个数,这是显然的吧。
故此我们从每行第一个数开始往下填,填到每行$i$个数。
每行$i$个数,共有$C_{mid}^{i}$种情况,也就是说$n -= C_{mid} ^ {i}$。
与此同时,每列会加$C_{mid - 1}^{i - 1}$个数,也就是说$m -= C_{mid - 1} ^ {i - 1}$。
只需要判断一下最后是谁完事儿就行了。
但是如果到了最后,两边都不足以减掉一次怎么办?
只需要判断一下一共还剩下多少$1$可以填,看看够不够剩下的行即可,详见代码。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
char *p1, *p2, buf[100000];
#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )
int rd() {
int x = 0, f = 1;
char c = nc();
while (c < 48) {
if (c == '-')
f = -1;
c = nc();
}
while (c > 47) {
x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
}
return x * f;
}
ll qpow(ll x, ll y) {
int ans = 1;
while (y) {
if (y & 1) {
ans = ans * x;
}
y >>= 1;
x = x * x;
}
return ans;
}
int n, m;
bool check(int x) {
ll re1 = n - 1;
ll re2 = m;
ll C1 = -1, C2 = -1;
for (int i = 1; i <= x; i ++ ) {
// puts("Fuck");
if (C1 == -1) {
C2 = 1;
C1 = x;
}
else {
(C1 *= (x - i + 1)) /= i;
(C2 *= (x - i + 1)) /= (i - 1);
}
// cout << C1 << ' ' << C2 << endl ;
// cout << re1 << ' ' << re2 << endl ;
if(re1 < C1) {
return re1 * i <= re2 * x;
}
else {
if (re2 < C2) {
return false;
}
else {
re1 -= C1;
re2 -= C2;
}
}
}
if (!re1) {
return true;
}
return false;
}
int main() {
// freopen("fire.in", "r", stdin);
// freopen("fire.out", "w")
int T = rd();
while (T -- ) {
n = rd(), m = rd();
if (n == 1) {
puts("0");
continue;
}
int l = 1, r = n;
int ans = n;
check(2);
while (l <= r) {
// printf("%d %d\n", l, r);
int mid = (l + r) >> 1;
if (check(mid)) {
ans = mid;
r = mid - 1;
}
else {
l = mid + 1;
}
}
printf("%d\n", ans);
}
return 0;
}
/*
1
4 2
*/
/*
12
4 1
4 2
7 3
1 1
42 7
2333333 2
2333333 23
2333333 233
2333333 2333
2333333 23333
2333333 233333
2333333 2333333
*/
小结:能开$long\ long$就开吧,不能慢多少。
[校内模拟赛T3]火花灿灿_二分答案_组合数学_贪心的更多相关文章
- BZOJ_3613_[Heoi2014]南园满地堆轻絮_二分答案
BZOJ_3613_[Heoi2014]南园满地堆轻絮_二分答案 Description 小 Z 是 ZRP(Zombies’ Republic of Poetry,僵尸诗歌共和国)的一名诗歌爱好者, ...
- BZOJ_4590_[Shoi2015]自动刷题机_二分答案
BZOJ_4590_[Shoi2015]自动刷题机_二分答案 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题 ...
- BZOJ_1044_[HAOI2008]木棍分割_二分答案+DP+单调队列
BZOJ_1044_[HAOI2008]木棍分割_二分答案+DP Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个 ...
- BZOJ_2097_[Usaco2010 Dec]Exercise 奶牛健美操_二分答案+树形DP
BZOJ_2097_[Usaco2010 Dec]Exercise 奶牛健美操_二分答案+树形DP Description Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间 的 ...
- BZOJ_5343_[Ctsc2018]混合果汁_二分答案+主席树
BZOJ_5343_[Ctsc2018]混合果汁_二分答案+主席树 题意:给出每个果汁的价格p,美味度d,最多能放的体积l.定义果汁混合后的美味度为果汁的美味度的最小值. m次询问,要求花费不大于g, ...
- 【20170521校内模拟赛】热爱生活的小Z
学长FallDream所出的模拟赛,个人感觉题目难度还是比较适中的,难度在提高+左右,可能比较接近弱省省选,总体来讲试题考查范围较广,个人认为还是很不错的. 所有试题如无特殊声明,开启-O2优化,时限 ...
- 【20170920校内模拟赛】小Z爱学习
所有题目开启-O2优化,开大栈空间,评测机效率为4亿左右. T1 小 Z 学数学(math) Description 要说小 Z 最不擅长的学科,那一定就是数学了.这不,他最近正在学习加法运算.老 ...
- 体育成绩统计——20180801模拟赛T3
体育成绩统计 / Score 题目描述 正所谓“无体育,不清华”.为了更好地督促同学们进行体育锻炼,更加科学地对同学们进行评价,五道口体校的老师们在体育成绩的考核上可谓是煞费苦心.然而每到学期期末时, ...
- 20180520模拟赛T3——chess
[问题描述] 小美很喜欢下象棋. 而且她特别喜欢象棋中的马. 她觉得马的跳跃方式很独特.(以日字格的方式跳跃) 小芳给了小美一张很大的棋盘,这个棋盘是一个无穷的笛卡尔坐标. 一开始\(time=0\) ...
随机推荐
- Luogu P2824 [HEOI2016/TJOI2016]排序 线段树+脑子
只会两个$log$的$qwq$ 我们二分答案:设答案为$ans$,则我们把$a[i]<=ans$全部设成$0$,把$a[i]>ans$全部设成$1$,扔到线段树里,这样区间排序(升序)就是 ...
- 解决Spring AOP Controller 不生效
在spring-mvc.xml文件中,进行以下配置,就可以实现在Controller中, 方法一:最简单的,在spring-mvc.xml配置文件中,添加以下语句 spring-mvc.xml < ...
- 在 CentOS 7 上安装 RabbitMQ
RabbitMQ 服务器在安装之前需要安装 erlang. 最新版本的 RabbitMQ 3.8.0 需要 Erlang 21.3 以上的版本支持. 在这里,我们需要在你的 CentOS 中安装 Er ...
- Mysql 修改最大链接数
链接数过小经常出现ERROR 1040: Too many connections错误 show variables like '%max_connections%'; 查看当前的mysql链接值 ...
- Apache反向代理解析二级目录/泛目录教程/apache反向代理/apache泛目录反向代理
同nginx一样,apache解析目录不需要安装任何东西,在配置文件里加入解析规则即可.解析规则: <IfModule mod_proxy.c> ProxyPreserveHost On ...
- 堡垒机前戏——paramiko
提要:在写堡垒机之前,我们必须要了解paramiko这个第三方库.有关于python的第三方库的安装很简单,可以自行百度. 该模块基于SSH用于连接远程服务器并执行相关操作. SSHClient 用于 ...
- jQuery的$符号
jQuery使用$的原因是: 书写简洁, 相对于其他字符与众不同, 容易被记住. JQuery占用了两个变量: $ 和 jQuery. 当在代码中打印 $ 和 jQuery时: <script ...
- MKAnnotation image offset with custom pin image
</pre><pre> Your UIAnnotationView is always drawn at the same scale, the map's zoom leve ...
- iconfont最基础使用
iconfont最基础使用 一.总结 一句话总结: 你加入购物车然后下载好了图标之后,里面有demo_index.html,会非常详细的教你 Unicode/Font class/Symbol三种使用 ...
- [转]五步git操作搞定Github中fork的项目与原作者同步
命令如下: git clone xxx-fork.git git remote add xxx xxx.git git fetch xxx git merge xxx/master git push ...