CF643F-Bears and Juice【组合数学】
正题
题目链接:https://www.luogu.com.cn/problem/CF643F
题目大意
题目有点奇怪就直接放翻译了
有 \(n\) 只熊和若干桶果汁和恰好一桶酒,每一天每只熊会选择一些桶(可能不选)并各喝一 杯,喝到酒的熊会去睡觉并不再回来,通过这个信息,熊们想知道哪个桶里是酒。
只有 \(p\) 个睡 觉的位置,当睡觉的熊超过了 \(p\) 只或者所有熊都在睡觉时熊们就失败了。
令 \(R_i\) 表示在 \(i\) 天内桶的数量最多少,使得熊可以成功知道酒的位置。令 \(X_i = (i\times R_i) \bmod 2^{32}\),你需要求出 \(X_1 \oplus X_2 \oplus\ldots \oplus X_q\)。
\(1\leq n\leq 10^9\),\(1\leq p\leq 130\),\(1\leq q \leq 2\times 10^6\)。
解题思路
之前在XJ杂题选讲时候的神奇题目
题目比较乱但是我们发现题目问的是最多的数量,而不是最劣情况下的最多数量,所以这个东西是在最优情况下能分辨的数量。
这是我们之前很少接触的一种形式,这里需要用到信息的概念,因为我们是最优的,相当于我们所有的情况都可以去尝试,也就是每种信息都可以为我们选出一个答案,那么显然我们让选出的这些答案两两不同肯定就是最优的,所以这里的\(R_i\)就表示\(i\)天以内我们能够获取的信息的数量
那么我们现在能够得到的信息数就是有多少头熊睡着了,和分别在哪一天睡着的,那么有
\]
也就是组合睡觉的熊,然后每个睡觉的都可以在任意天的时候睡觉
这个东西主要是\(\binom{n}{j}\)因为没有逆元比较麻烦,但是因为\(j\)比较小所以我们可以直接暴力枚举上下的因子然后消掉他们的\(gcd\)就好了
时间复杂度\(O(p^3\log p+q\times p)\)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int n,p,q;
unsigned ans,f[300];
vector<int> a,b;
int main()
{
scanf("%d%d%d",&n,&p,&q);
p=min(n-1,p);
for(int i=0;i<=p;i++){
a.clear();b.clear();f[i]=1;
for(int j=0;j<i;j++)a.push_back(n-j);
for(int j=1;j<=i;j++)b.push_back(j);
for(int x=0;x<a.size();x++)
for(int y=0;y<b.size();y++){
int d=__gcd(a[x],b[y]);
a[x]/=d;b[y]/=d;
}
for(int x=0;x<a.size();x++)f[i]=1u*a[x]*f[i];
}
for(int i=1,t=1;i<=q;i++){
unsigned tmp=0,k=1;
for(int j=0;j<=p;j++,k=1u*i*k)
tmp+=f[j]*k;
ans^=1u*i*tmp;
}
printf("%u",ans);
}
CF643F-Bears and Juice【组合数学】的更多相关文章
- Codeforces 643F - Bears and Juice(思维题)
Codeforces 题目传送门 & 洛谷题目传送门 首先直接暴力枚举显然是不现实的,我们不妨换个角度来处理这个问题,考虑这 \(R_i\) 个瓶子中每一瓶被哪些熊在哪一天喝过. 我们考虑对这 ...
- 【BZOJ-4435】Juice Junctions 最小割树(分治+最小割)+Hash
4435: [Cerc2015]Juice Junctions Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 20 Solved: 11[Submi ...
- poj 3734 Blocks 快速幂+费马小定理+组合数学
题目链接 题意:有一排砖,可以染红蓝绿黄四种不同的颜色,要求红和绿两种颜色砖的个数都是偶数,问一共有多少种方案,结果对10007取余. 题解:刚看这道题第一感觉是组合数学,正向推了一会还没等推出来队友 ...
- ural 2071. Juice Cocktails
2071. Juice Cocktails Time limit: 1.0 secondMemory limit: 64 MB Once n Denchiks come to the bar and ...
- 组合数学or not ---- n选k有重
模板问题: 1. 取物品 (comb.pas/c/cpp) [问题描述] 现在有n个物品(有可能相同),请您编程计算从中取k个有多少种不同的取法.[输入] 输入文件有两行,第一行包含两个整数n,k(2 ...
- 组合数学(全排列)+DFS CSU 1563 Lexicography
题目传送门 /* 题意:求第K个全排列 组合数学:首先,使用next_permutation 函数会超时,思路应该转变, 摘抄网上的解法如下: 假设第一位是a,不论a是什么数,axxxxxxxx一共有 ...
- uestc1888 Birthday Party 组合数学,乘法原理
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=25539#problem/G 题目意思: 有n个人,每个人有一个礼物,每个人能拿 ...
- UVA 11076 Add Again 计算对答案的贡献+组合数学
A pair of numbers has a unique LCM but a single number can be the LCM of more than one possiblepairs ...
- POJ3252——Round Number(组合数学)
Round Numbers DescriptionThe cows, as you know, have no fingers or thumbs and thus are unable to pla ...
随机推荐
- swagger2 注解说明文档
@Api:用于类上,说明该类的作用.可以标记一个Controller类做为swagger 文档资源 @Api(value = "xxx", description = " ...
- 【axios】API 说明
基于promise用于浏览器和node.js的http客户端 特点 支持浏览器和node.js 支持promise 能拦截请求和响应 能转换请求和响应数据 能取消请求 自动转换JSON数据 浏览器端支 ...
- Django中的增删改查
1.model 假设我们的model如下: 某个JobType下有很多Job. class JobType(models.Model): name = models.CharField(max_len ...
- servlet中servletContext的五大作用(三)
1. 获取web的上下文路径 2. 获取全局的参数 3. 作为域对象使用 4. 请求转发 5. 读取web项目的资源文件 package day10.about_serv ...
- git《一》
org.eclipse.jgit.api.errors.TransportException: https://gitee.com/wbweb/springboot_vue.git: Authenti ...
- Red Hat Enterprise Linux 7.2修改主机名(hostname)
Red Hat Enterprise Linux 7.2在安装的时候,会默认生成主机名:localhost. 那么如何修改成自己想要的自己名? //格式为:用户名@主机名 比如: [root@loca ...
- 【Qt pro 文件配置】
一.默认配置 默认的pro文件配置如下: 如果采用Qt默认的pro配置,其编译后产生的文件会默认集中分布在debug和release目录下,如下图的obj和moc等文件对后续打包发布并没有意义. 二. ...
- JDBC分页查询及实现
当数据过多时,一页之内是无法显示的,因此需要进行分页显示. (一)分页技术实现: 物理分页: - 在数据库执行查询时(实现分页查询),查询需要的数据--依赖数据库的SQL语句 - 在sql查询时,从数 ...
- LeetCode通关:通过排序一次秒杀五道题,舒服!
刷题路线参考:https://github.com/chefyuan/algorithm-base 大家好,我是拿输出博客督促自己刷题的老三,前面学习了十大排序:万字长文|十大基本排序,一次搞定!,接 ...
- markdown的骚气操作(一)
markdown 系列其他内容 markdown的骚气操作(一)✓ latex的骚气操作(二) 本文目标 主要介绍markdown锚点.索引脚注.对勾及选择框.表格显示位置和符号显示位置.绘制 ...