Bears and Juice

题目链接:luogu CF643F

题目大意

有 n 个熊 p 张床,有一些酒桶,数量你定,其中有一个放酒其它放果汁,然后每天每个熊可以选一个酒桶集合(可以为空),如果熊吃到酒就会占一张床睡觉,如果不够床或者熊全睡了就输了。
然后问你给你 1~q 天的时间,你最多能弄多少个酒桶,使得这些熊一定能在不输的条件下找到酒的位置。

思路

很神奇的题呢!
考虑怎样会区分出酒桶(因为你酒在那个桶都要能找到),那我们考虑怎样会区分不出来。
然后再发现一个东西是我们只能从谁醉了来得到信息,有用的信息。

那我们考虑怎么区分,就是对于一个桶如果我们列一个表表示第 i i i 天第 j j j 头熊有没有吃它。
那显然如果表不同就是不同的桶啦,那表有多少个呢?

考虑枚举由多少个熊吃了这个,然后对于每个熊它可以在这 x x x 天的任意一天吃。
R x = ∑ i = 0 min ⁡ ( n − 1 , p ) ( n i ) x i R_x=\sum\limits_{i=0}^{\min(n-1,p)}\binom{n}{i}x^i Rx​=i=0∑min(n−1,p)​(in​)xi

那就结束嘞!
(由于不能逆元你组合数可以维护每个小质数有多少个,然后大的乘积是多少)
(就是小的就是可能会被下面 i i i 除掉的,也就是 130 130 130 以内的,大的就直接记录乘积即可)

(预处理出 R R R 就可以 O ( min ⁡ ( n , p ) q ) O(\min(n,p)q) O(min(n,p)q) 完成求答案啦)
(带 log ⁡ \log log 不管不写啦啦啦/tp)

代码

#include<cstdio>using namespace std;int n, p, q;
unsigned int ans, sum, di, vals[131];
int val[131], id[131], tot, num[131];unsigned int ksm(unsigned int x, int y) {unsigned int re = 1;while (y) {if (y & 1) re = re * x;x = x * x; y >>= 1;}return re;
}void Run(int x, int gx) {for (int i = 1; i <= tot; i++) {while (x % val[i] == 0) {num[i] += gx; x /= val[i];}}di = di * x;
}int main() {for (int i = 2; i <= 130; i++) {bool prime = 1;for (int j = 2; j < i; j++) if (i % j == 0) {prime = 0; break;}if (prime) id[i] = ++tot, val[tot] = i;}scanf("%d %d %d", &n, &p, &q);di = 1; vals[0] = 1;for (int i = 1; i <= p && i < n; i++) {Run(n - i + 1, 1); Run(i, -1);sum = 1;for (int j = 1; j <= tot; j++) sum *= ksm(val[j], num[j]);vals[i] = sum * di;}for (int i = 1; i <= q; i++) {sum = 0; di = 1;for (int j = 0; j <= p && j < n; j++)sum += vals[j] * di, di = di * i;ans ^= sum * i;}printf("%u", ans);return 0;
}

【luogu CF643F】Bears and Juice(结论题)相关推荐

  1. [CF643F]Bears and Juice

    题目 传送门 to CF 题目概要 有 n n n 只小白鼠,有 k k k 瓶药(其一是毒药).共 t t t 天时间,从第 0 0 0 天开始,你可以给小白鼠任意喝药,次日你可以看到这些小白鼠的存 ...

  2. CodeForces - 1498E Two Houses(交互+图论,结论题)

    题目链接:点击查看 题目大意:给出一个由 nnn 个点组成的竞赛图,现在要求出一组点对 (A,B)(A,B)(A,B),满足两个点可以互达,且入度的绝对值之差最大 题目分析:结论题,先放结论: 结论: ...

  3. agc015F - Kenus the Ancient Greek(结论题)

    题意 题目链接 $Q$组询问,每次给出$[x, y]$,定义$f(x, y)$为计算$(x, y)$的最大公约数需要的步数,设$i \leqslant x, j \leqslant y$,求$max( ...

  4. 【uoj#180】[UR #12]实验室外的攻防战 结论题+树状数组

    题目描述 给出两个长度为 $n$ 的排列 $A$ 和 $B$ ,如果 $A_i>A_{i+1}$ 则可以交换 $A_i$ 和 $A_{i+1}$ .问是否能将 $A$ 交换成 $B$ . 输入 ...

  5. CF869A The Artful Expedient 结论题+数论

    传送门 题目描述 Tommy和Karen在玩一个游戏. 他们各自准备了一个长度为n的数组,Tommy的数组称作a,Karen的数组称作b. 保证这2n个数互不相同,设这2n个数构成的集合为S. 现在他 ...

  6. 数字迷阵(矩阵快速幂+结论题)

    数字迷阵(矩阵快速幂+结论题) 题目描述 小可可参观科学博物馆时,看到一件藏品,上面有密密麻麻的数字,如下所示:    1   2   3   5    8    13   21   34   55 ...

  7. 牛客练习赛51 C 勾股定理 (结论题)

    大致题意 给一个 n (1<=n<=1e9) ,求其组成直角三角形的另外两条边,输出任意一组即可. 思路 结论题 除了 1,2 没用答案,其余的所有正整数满足以下勾股数结论. 可以记忆一下 ...

  8. [BZOJ3609][Heoi2014]人人尽说江南好 结论题

    Description 小 Z 是一个不折不扣的 ZRP(Zealot Round-game Player,回合制游戏狂热玩家), 最近他 想起了小时候在江南玩过的一个游戏.  在过去,人们是要边玩游 ...

  9. 【uoj#175】新年的网警 结论题+Hash

    题目描述 给出一张 $n$ 个点 $m$ 条边的无向连通图,每条边的边权为1.对于每个点 $i$ ,问是否存在另一个点 $j$ ,使得对于任意一个不为 $i$ 或 $j$ 的点 $k$ ,$i$ 到 ...

最新文章

  1. 信号编程之sigaction函数和sigqueue函数
  2. 关闭PdfReader右侧工具栏的方法
  3. SAP Spartacus 的 Banner Component 请求
  4. 从谷歌公司发现的十个至理名言
  5. 信息学奥赛一本通 1245:不重复地输出数 | OpenJudge NOI 1.11 08:不重复地输出数
  6. svg标签的CSS3动画特效 - 经典特效2
  7. html手机号带国家前缀,今天跟大家总结一下手机型号的前缀、后缀(...
  8. 机器学习——Azure机器学习模型在线搭建实验原理+详细操作步骤+分析(以UCI数据库的数据为例)
  9. 信号的同调性(Coherence)分析及MATLAB实例
  10. 大龄程序员都去哪了?
  11. 不用社保也可以办理深圳居住证(全程网上办理) 解决提交后一直暂存状态
  12. 公共DNS服务器IP地址
  13. CNN基础——如何设置BatchSize
  14. NYOJ-54小明的存钱计划
  15. 小人物吃金币_android小游戏(1)
  16. 常见的Hash算法(General Purpose Hash Function Algorithms)
  17. Spring Boot 项目 - API 文档搜索引擎
  18. 整数n分解成素数乘积c语言,C程序实现整数的素数和分解问题
  19. Android 2D游戏引擎1
  20. 阅读bottle.py源码收获

热门文章

  1. 算法(1) 冒泡排序
  2. 使用three.js创建3D机房模型-分享一
  3. html 标签中 title 的换行
  4. Rust语言:元编程,强大的宏系统,菜鸟到高手进阶的必经之路
  5. 使用ContentObserver实现短信提醒功能
  6. 深圳一服装厂如何利用大数据塑造核心竞争力转型先进制造业?
  7. 地下城与勇士体验服不显示服务器,地下城与勇士M手游体验服进不去怎么办?内测问题与解决方案汇总[多图]...
  8. 远程挂断电话流程分析
  9. Windows下Linux子系统的安装与使用 wsl
  10. java socket 两台电脑,Socket程序两台计算机为什么连接失败?(在同一台电脑上就成功)...