(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. 【NOIP2019模拟2019.11.13】旅行 && GDKOI2018 还念(二分答案+dij)

    Description: 题解: 显然满足二分性. 并且每一条边要不选l要不选r. 二分的那条链肯定要选l. 考虑有两个人在走最短路,一个人一开始必须走二分的那条链,要求第一个人走的比第二个人快. 安 ...

  2. Node.js环境下通过Express创建Web项目

    通过Express命令创建项目 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express ...

  3. VMware 克隆 CenterOS 虚拟机

    前面介绍了VMware 安装CenterOS 6.9,现在再介绍下 VMware 克隆虚拟机,克隆虚拟机可以快速的创建虚拟机,免去重复安装的烦恼. 一.VMware 克隆 CenterOS 虚拟机 选 ...

  4. A1082 Read Number in Chinese (25 分)

    1082 Read Number in Chinese (25 分)   Given an integer with no more than 9 digits, you are supposed t ...

  5. vue开发请求本地模拟数据的配置方法(转)

    VUE开发请求本地数据的配置,早期的vue-lic下面有dev-server.js和dev-client.js两文件,请求本地数据在dev-server.js里配置,最新的vue-webpack-te ...

  6. PAT甲级——A1130 Infix Expression【25】

    Given a syntax tree (binary), you are supposed to output the corresponding infix expression, with pa ...

  7. java遇到的问题

    1.java 初始化泛型数组 public static <T> T[] toArray(java.util.List<T> src, Class<T> type) ...

  8. centos7.3 安装gitlab

    系统自带ruby版本太低,需要手动编译2.4版本

  9. 推荐几个顶级的IT技术公众号,坐稳了!

    提升自我的路很多,学习是其中最为捷径的一条.丰富的知识提升的不仅仅是你的阅历,更能彰显你的气质,正如古人云:"文质彬彬是君子." 今天为大家整理了10个公众号,分别为多领域,多角度 ...

  10. 通过rocketmq思考一下mq的设计取舍

    1. RocketMQ路由中心NameServer 2. RocketMQ消息发送 3. RocketMQ消息存储 4. RocketMQ消息消费 5. 消息过滤FiterServer 6. Rock ...