(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的更多相关文章

  1. Loj #3124. 「CTS2019 | CTSC2019」氪金手游

    Loj #3124. 「CTS2019 | CTSC2019」氪金手游 题目描述 小刘同学是一个喜欢氪金手游的男孩子. 他最近迷上了一个新游戏,游戏的内容就是不断地抽卡.现在已知: - 卡池里总共有 ...

  2. 「CTS2019 | CTSC2019」氪金手游 解题报告

    「CTS2019 | CTSC2019」氪金手游 降 智 好 题 ... 考场上签到失败了,没想容斥就只打了20分暴力... 考虑一个事情,你抽中一个度为0的点,相当于把这个点删掉了(当然你也只能抽中 ...

  3. 「CTS2019 | CTSC2019」随机立方体 解题报告

    「CTS2019 | CTSC2019」随机立方体 据说这是签到题,但是我计数学的实在有点差,这里认真说一说. 我们先考虑一些事实 如果我们在位置\((x_0,y_0,z_0)\)钦定了一个极大数\( ...

  4. LOJ 3119: 洛谷 P5400: 「CTS2019 | CTSC2019」随机立方体

    题目传送门:LOJ #3119. 题意简述: 题目说的很清楚了. 题解: 记恰好有 \(i\) 个极大的数的方案数为 \(\mathrm{cnt}[i]\),则答案为 \(\displaystyle\ ...

  5. LOJ 3120: 洛谷 P5401: 「CTS2019 | CTSC2019」珍珠

    题目传送门:LOJ #3120. 题意简述: 称一个长度为 \(n\),元素取值为 \([1,D]\) 的整数序列是合法的,当且仅当其中能够选出至少 \(m\) 对相同元素(不能重复选出元素). 问合 ...

  6. loj3120 「CTS2019 | CTSC2019」珍珠

    link .... 感觉自己太颓废了....还是来更题解吧...[话说写博客会不会涨 rp 啊 qaq ? 题意: 有 n 个物品,每个都有一个 [1,D] 中随机的颜色,相同颜色的两个物品可以配对. ...

  7. LOJ #3119「CTS2019 | CTSC2019」随机立方体 (容斥)

    博客链接 里面有个下降幂应该是上升幂 还有个bk的式子省略了k^3 CODE 蛮短的 #include <bits/stdc++.h> using namespace std; const ...

  8. 【LOJ】#3123. 「CTS2019 | CTSC2019」重复

    LOJ3123 60pts 正难则反,熟练转成总方案数减掉每个片段都大于等于s的字典序的方案 按照一般的套路建出kmp上每个点加一个字符的转移边的图(注意这个图开始字母必须是nxt链中下一个相邻的字符 ...

  9. 【LOJ】#3121. 「CTS2019 | CTSC2019」无处安放

    第一次有耐心去研究一道题答-- 以前看到题答要么扔要么就水能简单手玩出来的 1 2可以手玩出来,快乐! 4呢发现3 3比较格路,就把3 3都配了,一边带个4的除了4 4都塞满这么放进去,然后把一边带2 ...

  10. 【LOJ】#3120. 「CTS2019 | CTSC2019」珍珠

    LOJ3120 52pts \(N - D >= 2M\)或者\(M = 0\)那么就是\(D^{N}\) 只和数字的奇偶性有关,如果有k个奇数,那么必须满足\(N - k >= 2M\) ...

随机推荐

  1. PHP curl_reset函数

    curl_reset— 重置libcurl会话句柄的所有选项. 说明 void curl_reset ( resource $ch ) 该函数将重新初始化cURL的所有选项值(默认值). 注意:cur ...

  2. 在树莓派3B上搭建LAMP

    一.安装apache2 sudo apt-get install apache2 在电脑上输入树莓派的网址会有如下显示 二.安装Mysql sudo apt-get install mysql-ser ...

  3. vue 学习中遇到的一些问题

    Vue中data有return返回函数问题: 在简单的vue实例中会看到Vue实例中data属性展示方式如下: let app= newVue({ el:"#app", data: ...

  4. jenkins安装-配置

    jenkins安装-配置 注意: jenkins访问 用chrome浏览器 安装包下载:http://pkg.jenkins-ci.org/redhat/ (使用2.92版本的) 安装jdk: 1.8 ...

  5. (转)Android OpenGL ES(一)

    转:http://wiki.jikexueyuan.com/project/opengl-es-guide/pipeline.html OpenGL ES 主要用来开发 3D 图形应用的.OpenGL ...

  6. SSM框架启动报 org.apache.bval.jsr303.ConfigurationImpl.getDefaultParameterNameProvider

    今天在做项目,在启动的时候报了一个错.错误信息是org.apache.bval.jsr303.ConfigurationImpl.getDefaultParameterNameProvider. 原因 ...

  7. PIL库,图像处理第三方库

    PIL  ---> python imaging library 安装需要安装pillow库,包含了21种类,其中Image类是PIL最重要的一个类,可以通过它来处理图像. Python最常用的 ...

  8. 用 Flask 来写个轻博客 (5) — (M)VC_SQLAlchemy 的 CRUD 详解

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 SQLAlchemy 的 CRUD Create 增添数据 ...

  9. Linux命令 uname

    1.简介 管理系统而使用的命令,用于显示系统信息(不同linux版本可能有写差异) 2.语法 uname [-amnrsv] (1) -a,--all 显示所有的信息 (2) -s,--kernel- ...

  10. Ajax,ajax封装

    /** * Created by liyinghao on 2016/8/23. */ /*仿jQuery中的ajax方法,简单版实现;封装ajax的工具函数*/ /* * 1 请求方式 type g ...