CTSC2019
(upd:随机立方体AC)
太菜了只会部分分。以后慢慢补坑吧……
随机立方体:
30分:
正常人都能想到的的转移状态(我的确是弱智),从大往小填数,记录有多少个极大值点和三个方向上各占了多少。转移可以计算。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; #define upd(x,y) x+=y,x%=P typedef long long i64; const int N=;
const int P=; int f[][N][N][N][N]; int pwr(int x,int a){
int s=;
while(a){
if(a&)s=(i64)s*x%P;
x=(i64)x*x%P;
a>>=;
}
return s;
} int main()
{
int T;
scanf("%d",&T);
while(T--){
int r,c,l,n,m;
scanf("%d%d%d%d",&r,&c,&l,&m);
n=r*c*l;
if(m>r&&m>c&&m>l){
printf("0\n");
continue;
}
memset(f,,sizeof(f));
int w=,p=;
f[w][][][][]=;
int i,j,x,y,z;
for(i=n;i;i--){
swap(w,p);
memset(f[w],,sizeof(f[w]));
for(j=;j<=n-i+&&j<=m;j++)
for(x=;x<=n-i+&&x<=r;x++)
for(y=;y<=n-i+&&y<=c;y++)
for(z=;z<=n-i+&&z<=l;z++){
upd(f[w][j][x][y][z],(i64)f[p][j][x][y][z]*max(,x*y*z-(n-i))%P);
upd(f[w][j][x][y][z],(i64)f[p][j][x-][y][z]*(r-x+)*y*z%P);
upd(f[w][j][x][y][z],(i64)f[p][j][x][y-][z]*x*(c-y+)*z%P);
upd(f[w][j][x][y][z],(i64)f[p][j][x][y][z-]*x*y*(l-z+)%P);
upd(f[w][j][x][y][z],(i64)f[p][j][x][y-][z-]*x*(c-y+)*(l-z+)%P);
upd(f[w][j][x][y][z],(i64)f[p][j][x-][y][z-]*(r-x+)*y*(l-z+)%P);
upd(f[w][j][x][y][z],(i64)f[p][j][x-][y-][z]*(r-x+)*(c-y+)*z%P);
upd(f[w][j][x][y][z],(i64)f[p][j-][x-][y-][z-]*(r-x+)*(c-y+)*(l-z+)%P);
}
}
p=;
for(i=;i<=n;i++)
p=(i64)p*i%P;
printf("%d\n",(i64)f[w][m][r][c][l]*pwr(p,P-)%P);
}
return ;
}
AC:
容斥,钦定几个点为极大值点,其他不管,然后用组合数作为系数同时算本质相同的方案。
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long i64;
const int N=5e6+;
const int P=; int pwr(int x,int a){
int s=;
for(;a;a>>=,x=1ll*x*x%P)
if(a&)s=1ll*s*x%P;
return s;
} int inv[N],iinv[N];
int sinv[N],siinv[N];
int v[N],f[N]; int C(int n,int m){
return 1ll*inv[n]*iinv[m]%P*iinv[n-m]%P;
} int main()
{
int i;
inv[]=;
for(i=;i<N;i++)
inv[i]=1ll*inv[i-]*i%P;
iinv[N-]=pwr(inv[N-],P-);
for(i=N-;i;i--)
iinv[i-]=1ll*iinv[i]*i%P;
int T;
scanf("%d",&T);
while(T--){
int c,r,h,m;
scanf("%d%d%d%d",&c,&r,&h,&m);
int n=min(min(c,r),h);
int sv=1ll*c*r%P*h%P;
for(i=;i<=n;i++)
v[i]=(P+sv-1ll*(c-i)*(r-i)%P*(h-i)%P)%P;
for(i=;i<=n;i++)
f[i]=1ll*C(r,i)*C(c,i)%P*C(h,i)%P*pwr(inv[i],)%P;
sinv[]=;
for(i=;i<=n;i++)
sinv[i]=1ll*sinv[i-]*v[i]%P;
siinv[n]=pwr(sinv[n],P-);
for(i=n;i;i--)
siinv[i-]=1ll*siinv[i]*v[i]%P;
int ans=,d;
for(i=m,d=;i<=n;i++,d=P-d)
(ans+=1ll*d*C(i,m)%P*f[i]%P*siinv[i]%P)%=P;
printf("%d\n",ans);
}
return ;
}
珍珠:
O(nd):
只跟奇偶性有关。
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long i64;
const int P=;
const int S=5e7+;
const int N1=4e3+; int f[N1][N1]; int main()
{
int d,n,m,i,j;
scanf("%d%d%d",&d,&n,&m);
if((i64)d*n<S){
f[][]=;
for(i=;i<=n;i++)
for(j=;j<=d;j++){
if(j)f[i][j]+=(i64)f[i-][j-]*(d-j+)%P,
f[i][j]%=P;
if(j!=d)f[i][j]+=(i64)f[i-][j+]*(j+)%P,
f[i][j]%=P;
}
int ans=;
for(i=;i<=n-*m&&i<=d;i++)
ans+=f[n][i],ans%=P;
printf("%d",ans);
return ;
}
return ;
}
CTSC2019的更多相关文章
- Loj #3124. 「CTS2019 | CTSC2019」氪金手游
Loj #3124. 「CTS2019 | CTSC2019」氪金手游 题目描述 小刘同学是一个喜欢氪金手游的男孩子. 他最近迷上了一个新游戏,游戏的内容就是不断地抽卡.现在已知: - 卡池里总共有 ...
- 「CTS2019 | CTSC2019」氪金手游 解题报告
「CTS2019 | CTSC2019」氪金手游 降 智 好 题 ... 考场上签到失败了,没想容斥就只打了20分暴力... 考虑一个事情,你抽中一个度为0的点,相当于把这个点删掉了(当然你也只能抽中 ...
- 「CTS2019 | CTSC2019」随机立方体 解题报告
「CTS2019 | CTSC2019」随机立方体 据说这是签到题,但是我计数学的实在有点差,这里认真说一说. 我们先考虑一些事实 如果我们在位置\((x_0,y_0,z_0)\)钦定了一个极大数\( ...
- LOJ 3119: 洛谷 P5400: 「CTS2019 | CTSC2019」随机立方体
题目传送门:LOJ #3119. 题意简述: 题目说的很清楚了. 题解: 记恰好有 \(i\) 个极大的数的方案数为 \(\mathrm{cnt}[i]\),则答案为 \(\displaystyle\ ...
- LOJ 3120: 洛谷 P5401: 「CTS2019 | CTSC2019」珍珠
题目传送门:LOJ #3120. 题意简述: 称一个长度为 \(n\),元素取值为 \([1,D]\) 的整数序列是合法的,当且仅当其中能够选出至少 \(m\) 对相同元素(不能重复选出元素). 问合 ...
- loj3120 「CTS2019 | CTSC2019」珍珠
link .... 感觉自己太颓废了....还是来更题解吧...[话说写博客会不会涨 rp 啊 qaq ? 题意: 有 n 个物品,每个都有一个 [1,D] 中随机的颜色,相同颜色的两个物品可以配对. ...
- LOJ #3119「CTS2019 | CTSC2019」随机立方体 (容斥)
博客链接 里面有个下降幂应该是上升幂 还有个bk的式子省略了k^3 CODE 蛮短的 #include <bits/stdc++.h> using namespace std; const ...
- 【LOJ】#3123. 「CTS2019 | CTSC2019」重复
LOJ3123 60pts 正难则反,熟练转成总方案数减掉每个片段都大于等于s的字典序的方案 按照一般的套路建出kmp上每个点加一个字符的转移边的图(注意这个图开始字母必须是nxt链中下一个相邻的字符 ...
- 【LOJ】#3121. 「CTS2019 | CTSC2019」无处安放
第一次有耐心去研究一道题答-- 以前看到题答要么扔要么就水能简单手玩出来的 1 2可以手玩出来,快乐! 4呢发现3 3比较格路,就把3 3都配了,一边带个4的除了4 4都塞满这么放进去,然后把一边带2 ...
- 【LOJ】#3120. 「CTS2019 | CTSC2019」珍珠
LOJ3120 52pts \(N - D >= 2M\)或者\(M = 0\)那么就是\(D^{N}\) 只和数字的奇偶性有关,如果有k个奇数,那么必须满足\(N - k >= 2M\) ...
随机推荐
- Centos MySQL 5.7安装、升级教程
MySQL 5.7安装.升级笔记分享: 卸载当前的 MySQL 查看当前 MySQL 版本: ? 1 2 [root@coderknock ~]# mysql -V mysql Ver 14.14 D ...
- 【Flutter学习】基本组件之BottomNavigationBar底部导航栏
一,概述 BottomNavigationBar即是底部导航栏控件,显示在页面底部的设计控件,用于在试图切换,底部导航栏包含多个标签.图标或者两者搭配的形式,简而言之提供了顶级视图之间的快速导航. 二 ...
- nginx启动报错: libpcre.so.1/libpcre.so.0: cannot open shared object file
1.用file /bin/ls查看当前系统是几位的 2.64位系统创建软连接:ln -s /usr/local/lib/libpcre.so.1 /lib64 3.32未系统创建软连接:ln -s / ...
- Delphi 正则表达式之TPerlRegEx
官方网站: http://www.regular-expressions.info/delphi.html 直接下载: http://www.regular-expressions.info/down ...
- Git Git管理码云项目
Git 一.下载安装 1. 要使用git 先安转git 请到官网下载最新git https://git-scm.com/downloads 2. 一路默认安装,安装完成右键查看下是否有Git. 二 ...
- PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
PHP CURL与file_get_contents函数都可以获取远程服务器上的文件保存到本地,但在性能上面两者完全不在同一个级别,下面我先来介绍PHP CURL或file_get_contents函 ...
- 【Windows、SVN】在Windows服务器下安装SVN,并在客户端能维护代码版本
1.分别在客户端和服务器端安装软件 在网上搜索一下安装包的下载地址(这里暂不介绍) 得到2个安装文件 Server是装在服务器端的,另外一个装在客户端 2.安装SVN服务器端 基本一致下一步即可 特殊 ...
- HTML5: 目录
ylbtech-HTML5: 目录 1.返回顶部 1. http://www.runoob.com/html/html5-intro.html 2. http://www.w3school.com.c ...
- promise基础用法
/** * Created by liyinghao on 2016/11/6. */ const fs = require('fs'); /* * 新建一个Promise对象,Promise就是一个 ...
- python学习笔记:网络请求——requests模块
上面讲过的urllib模块太麻烦了,还有一个比较方便的模块,就是requests模块,好用到你怀疑人生·^_^,一定要会哦 需要安装,pip install requests即可,下面是request ...