Codeforces 643F - Bears and Juice(思维题)
首先直接暴力枚举显然是不现实的,我们不妨换个角度来处理这个问题,考虑这 \(R_i\) 个瓶子中每一瓶被哪些熊在哪一天喝过。
我们考虑对这 \(R_i\) 个瓶子各建立一个 \(q\times n\) 的 01 矩阵,第 \(j\) 行第 \(k\) 列为 \(1\) 表示第 \(k\) 只熊在第 \(j\) 天尝过了这瓶酒,反之第 \(k\) 只熊在第 \(j\) 天尝过了这瓶酒。
那么题目中的条件可表示为:
- 每一个表格里 \(1\) 的个数不能超过 \(\min(p,n-1)\),因为假设该表格里里 \(1\) 的个数超过 \(\min(p,n-1)\),那么万一这个瓶子里装的是酒,就会出现要么出现有熊没有床睡,要么所有熊都醉倒了的情况,这显然是不行的。
- 不能存在两个瓶子,喝过它的熊的集合相同,且对应熊喝的天数也相同,则一旦这些熊喝醉了,剩下的熊就无论怎样也无法知道到底哪一桶是酒,哪一桶是饮料,因此这是非法的。
考虑设集合 \(S_i=\{(x,y)|\text{第}\ x\ \text{只熊在第}\ y\ \text{天尝过了第}\ i\ \text{个瓶子}\}\),那么上述条件又可翻译为:
- 对于任意 \(i\) 都有 \(|S_i|\leq\min(p,n-1)\)
- \(\forall i,j\in[1,R_i],S_i\neq S_j\)
条件 \(2\) 显然可以用抽屉原理进一步转化为求满足 \(|S|\leq\min(p,n-1)\) 的 \(S\) 的个数,而这个数又显然可以用组合数求出,\(ans_q=\sum\limits_{i=0}^{\min(p,n-1)}\dbinom{n}{i}q^i\),到此为止我们推导出了答案的式子。
算下复杂度,\(p\) 的范围只有 \(130\),故对于每个 \(q\) 暴力计算上式的值都没问题。还有个小问题,就是这题模数为 \(2^{32}\) 不是质数,这意味着不是所有数都有逆元,故我们不能用预处理阶乘+阶乘的逆元的方式计算组合数,不过这个问题显然难不住我们,由于这题 \(p\) 范围如此小,把组合数的式子暴力展开并暴力去分母的方法都能过,复杂度 \(p^3\log p\),当然有神仙想写 exLucas 那也没人拦着你,复杂度大约可以做到 \(p\log p\),反正我是太懒不想写了(
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define fill0(a) memset(a,0,sizeof(a))
#define fill1(a) memset(a,-1,sizeof(a))
#define fillbig(a) memset(a,63,sizeof(a))
#define pb push_back
#define ppb pop_back
#define mp make_pair
template<typename T1,typename T2> void chkmin(T1 &x,T2 y){if(x>y) x=y;}
template<typename T1,typename T2> void chkmax(T1 &x,T2 y){if(x<y) x=y;}
typedef pair<int,int> pii;
typedef long long ll;
namespace fastio{
#define FILE_SIZE 1<<23
char rbuf[FILE_SIZE],*p1=rbuf,*p2=rbuf,wbuf[FILE_SIZE],*p3=wbuf;
inline char getc(){return p1==p2&&(p2=(p1=rbuf)+fread(rbuf,1,FILE_SIZE,stdin),p1==p2)?-1:*p1++;}
inline void putc(char x){(*p3++=x);}
template<typename T> void read(T &x){
x=0;char c=getchar();T neg=0;
while(!isdigit(c)) neg|=!(c^'-'),c=getchar();
while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();
if(neg) x=(~x)+1;
}
template<typename T> void recursive_print(T x){if(!x) return;recursive_print(x/10);putc(x%10^48);}
template<typename T> void print(T x){if(!x) putc('0');if(x<0) putc('-'),x=~x+1;recursive_print(x);}
void print_final(){fwrite(wbuf,1,p3-wbuf,stdout);}
}
typedef unsigned int u32;
const int MAXN=130;
u32 gcd(int x,int y){return (!y)?x:gcd(y,x%y);}
int n,p,q;u32 c[MAXN+5];
u32 calc(int x){
vector<u32> a,b;
for(int i=1;i<=x;i++) a.pb(n-i+1),b.pb(i);
for(int i=0;i<a.size();i++) for(int j=0;j<b.size();j++){
u32 d=gcd(a[i],b[j]);a[i]/=d;b[j]/=d;
} u32 prod=1;
for(int i=0;i<a.size();i++) prod*=a[i];
return prod;
}
int main(){
scanf("%d%d%d",&n,&p,&q);p=min(n-1,p);
for(int i=0;i<=p;i++) c[i]=calc(i);u32 ans=0;
for(int i=1;i<=q;i++){
u32 prod=1,sum=0;
for(int j=0;j<=p;j++){
sum+=prod*c[j];
prod*=i;
} ans^=i*sum;
} printf("%u\n",ans);
return 0;
}
Codeforces 643F - Bears and Juice(思维题)的更多相关文章
- C. Nice Garland Codeforces Round #535 (Div. 3) 思维题
C. Nice Garland time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- Codeforces 515C 题解(贪心+数论)(思维题)
题面 传送门:http://codeforces.com/problemset/problem/515/C Drazil is playing a math game with Varda. Let’ ...
- Codeforces 1188B - Count Pairs(思维题)
Codeforces 题面传送门 & 洛谷题面传送门 虽说是一个 D1B,但还是想了我足足 20min,所以还是写篇题解罢( 首先注意到这个式子里涉及两个参数,如果我们选择固定一个并动态维护另 ...
- Codeforces 1365G - Secure Password(思维题)
Codeforces 题面传送门 & 洛谷题面传送门 首先考虑一个询问 \(20\) 次的方案,考虑每一位,一遍询问求出下标的这一位上为 \(0\) 的位置上值的 bitwise or,再一遍 ...
- Codeforces 1129E - Legendary Tree(思维题)
Codeforces 题面传送门 & 洛谷题面传送门 考虑以 \(1\) 为根,记 \(siz_i\) 为 \(i\) 子树的大小,那么可以通过询问 \(S=\{2,3,\cdots,n\}, ...
- CodeForces - 427A (警察和罪犯 思维题)
Police Recruits Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Sub ...
- codeforces 848B Rooter's Song 思维题
http://codeforces.com/problemset/problem/848/B 给定一个二维坐标系,点从横轴或纵轴垂直于发射的坐标轴射入(0,0)-(w,h)的矩形空间.给出点发射的坐标 ...
- Codeforces 729D Sea Battle(简单思维题)
http://codeforces.com/contest/738/problem/D https://www.cnblogs.com/flipped/p/6086615.html 原 题意:海战 ...
- E. Superhero Battle Codeforces Round #547 (Div. 3) 思维题
E. Superhero Battle time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
随机推荐
- PostMan生成的测试报告 工具node.js、步骤、结果
Postman生成测试报告的工具node.js 1.下载并安装: win系统(下载后一直下一步就好了) mac系统 2.配置环境 (1).在命令提示符里面输入npm 检验安装是否成功可以输入命令:n ...
- Hive架构及搭建方式
目录 前言 hive的基础知识 基本架构 metastore 内嵌服务和数据库 内嵌服务 服务和数据库单独部署 hcatalog 客户端 客户端的本地模式 beeline beeline的自动模式 j ...
- 跟着老猫一起来学GO,环境搭建
老猫的GO学习系列博客已经正式发车了,相信大家以前学习一门编程语言的时候也有经验,咱们一般都是从环境开始,在此呢,大家也跟着老猫从最开始的搭建环境开始. GO语言的安装 首先呢,我们开始需要下载GO语 ...
- [技术博客]大闸蟹的技术博客,通过gitlab api进行用户批量创建
技术博客--通过gitlab api批量注册用户 gitlab登录界面本身提供了register功能,但需要手工一个个添加,对于一次性会添加整个班级的学生的软工平台来说并不科学合理.使用gitlab ...
- 2020BUAA软工热身作业
2020BUAA软工热身作业 17373010 杜博玮 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 热身作业 我在这个课程的目标是 学习软件工 ...
- Noip模拟84 2021.10.27
以后估计都是用\(markdown\)来写了,可能风格会有变化 T1 宝藏 这两天老是会的题打不对,还是要细心... 考场上打的是维护\(set\)的做法,但是是最后才想出来的,没有维护对于是没有交. ...
- STM32学习笔记之核心板PCB设计
PCB设计流程 PCB规则设置 设计规则的单位跟随画布属性里设置的单位,此处单位是mil.导线线宽最小为10mil;不同网络元素之间最小间距为8mil;孔外径为24mil,孔内径为12mil;线长不做 ...
- hdu 3863 No Gambling (不会证明,但是是对的,,)
题意: N=4时 规则: 双方每次可以连接自己颜色的两个点(相邻,长度为1),线和线不能交叉重叠. 蓝方要连接左右,红方要连接上下. 蓝方先.问谁先连接? 思路: 经过观察....蓝方胜....... ...
- mysql查询表名和列名字
-- 登录yellowcong 数据库 mysql -uroot -proot yellowcong -- 查看当前数据库 select database() -- 查看数据库里面的表 --table ...
- log4j日志集成
一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog ...