火花灿灿

题目

数据范围


题解

这个题真的是个神仙题。

我们对于每块石头维护一个$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]火花灿灿_二分答案_组合数学_贪心的更多相关文章

  1. BZOJ_3613_[Heoi2014]南园满地堆轻絮_二分答案

    BZOJ_3613_[Heoi2014]南园满地堆轻絮_二分答案 Description 小 Z 是 ZRP(Zombies’ Republic of Poetry,僵尸诗歌共和国)的一名诗歌爱好者, ...

  2. BZOJ_4590_[Shoi2015]自动刷题机_二分答案

    BZOJ_4590_[Shoi2015]自动刷题机_二分答案 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题 ...

  3. BZOJ_1044_[HAOI2008]木棍分割_二分答案+DP+单调队列

    BZOJ_1044_[HAOI2008]木棍分割_二分答案+DP Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个 ...

  4. BZOJ_2097_[Usaco2010 Dec]Exercise 奶牛健美操_二分答案+树形DP

    BZOJ_2097_[Usaco2010 Dec]Exercise 奶牛健美操_二分答案+树形DP Description Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间 的 ...

  5. BZOJ_5343_[Ctsc2018]混合果汁_二分答案+主席树

    BZOJ_5343_[Ctsc2018]混合果汁_二分答案+主席树 题意:给出每个果汁的价格p,美味度d,最多能放的体积l.定义果汁混合后的美味度为果汁的美味度的最小值. m次询问,要求花费不大于g, ...

  6. 【20170521校内模拟赛】热爱生活的小Z

    学长FallDream所出的模拟赛,个人感觉题目难度还是比较适中的,难度在提高+左右,可能比较接近弱省省选,总体来讲试题考查范围较广,个人认为还是很不错的. 所有试题如无特殊声明,开启-O2优化,时限 ...

  7. 【20170920校内模拟赛】小Z爱学习

    所有题目开启-O2优化,开大栈空间,评测机效率为4亿左右. T1 小 Z 学数学(math) Description ​ 要说小 Z 最不擅长的学科,那一定就是数学了.这不,他最近正在学习加法运算.老 ...

  8. 体育成绩统计——20180801模拟赛T3

    体育成绩统计 / Score 题目描述 正所谓“无体育,不清华”.为了更好地督促同学们进行体育锻炼,更加科学地对同学们进行评价,五道口体校的老师们在体育成绩的考核上可谓是煞费苦心.然而每到学期期末时, ...

  9. 20180520模拟赛T3——chess

    [问题描述] 小美很喜欢下象棋. 而且她特别喜欢象棋中的马. 她觉得马的跳跃方式很独特.(以日字格的方式跳跃) 小芳给了小美一张很大的棋盘,这个棋盘是一个无穷的笛卡尔坐标. 一开始\(time=0\) ...

随机推荐

  1. laravel各种请求类

    curl请求类 composer require php-curl-class/php-curl-class

  2. Xilinx FFT IP核缩放因子说明

    以1024点FFT为例, reg [9:0] scale_sch = 10'b11_10_01_01_01; 流水线结构中,将每个基 2 的蝶形处理单元视为一个阶段. 每个阶段进行一次数据的缩减,缩减 ...

  3. 一个参数既可以是const还可以是volatile

    可以的,例如只读的状态寄存器.它是volatile因为它可能被意想不到地改变.它是const因为程序不应该试图去修改它. 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器 ...

  4. 【线性代数】2-2:消元(Eliminate)

    title: [线性代数]2-2:消元(Eliminate) toc: true categories: Mathematic Linear Algebra date: 2017-08-31 16:1 ...

  5. 小程序和vue的区别

    最近开发了一个比较完整的小程序项目,打算总结一下,小程序开发和vue开发的代码上的区别 1.小程序的路由写在app.json文件里,vue写在route.js里 2.小程序用 src="{{ ...

  6. codeforces#1165 F2. Microtransactions (hard version) (二分+贪心)

    题目链接: https://codeforces.com/contest/1165/problem/F2 题意: 需要买$n$种物品,每种物品$k_i$个,每个物品需要两个硬币 每天获得一个硬币 有$ ...

  7. Codeforces 1106E. Lunar New Year and Red Envelopes(DP)

    E. Lunar New Year and Red Envelopes 题意: 在长度为n的时间轴上,有k个红包,每个红包有领取时间段[s,t],价值w,以及领了个这个红包之后,在时间d到来之前无法再 ...

  8. centOS7搭建hadoop,zookeeper,hbase

    1.配置ssh免密登录 (本人使用的是centOS7虚拟机) (本人未在root用户下安装,建议使用root用户,不然很麻烦!!) ① 本机无密钥登录 1.进入~/.ssh目录(若无,则执行一次ssh ...

  9. LeetCode 240. 搜索二维矩阵 II(Search a 2D Matrix II)

    题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 m ...

  10. SpringMVC和AJAX交互

    在实际开发中我们经常需要前后台交互,那么springmvc与ajax之间交互这里记录下在实际开发中遇到的细节问题. jsp页面: <fieldset id="login" s ...