hdu 2018多校8
A.Character Encoding 简单计数
m个非负数和等于k的方案数为$\binom{m+k-1}{k}$, 但题目还要求每个数小于n, 容斥一下即可
即$ans = \sum\limits_{0\le i \le m}(-1)^i\binom{m}{i}\binom{m+k-1-ni}{k}$
B.Pizza Hub 计算几何
贪心可以知道最优情况三角形一定有一个顶点与矩形顶点重合, 暴力枚举判断一下即可
C. 不会
D.Parentheses Matrix 贪心
假设行列都为偶数, 因为奇数很容易特判. 再假设n>m, 我们假设初状态是每行全匹配, 再逐步调整到最优.
首先注意到第一列和最后一列显然不能动, 再考虑中间列的情况, 这里可以分两种情况讨论:
1, 保证每行都匹配
这样的话显然中间列匹配的上界为n+m/2-1, 手画一下很容易达到这个上界.
2, 不保证行匹配
这样的话, 手画一下可以发现, 通过破坏第一行和最后一行可以使得列全部匹配, 达到上界n+m-4.
最后取两种情况最大值即可.
但这题交了以后竟然WA了, 找了份题解拍了下所有小于200的n和m, 没发现是哪出锅了....
E. Magic Square 纯签到题
F. 不会
G.Make ZYB Happy 后缀自动机 (以后有时间补吧)
H. Taotao Picks Apples 讨论一下再二分
I.Pop the Balloons 状压
挺好的一个状压题, 三进制压一下, 第i位的0表示无气球, 1表示该位有气球, 2表示该位扎过一个气球
然后dp一次求出每种状态的方案数, 最后再统计答案即可.
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <queue>
#define pb push_back
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std;
typedef long long ll; const int N = 531450;
int n, m, k, t;
char a[22][22], b[22][22];
int g[N][22];
int fac[22], base[3][22];
ll dp[22][N], ans[22];
vector<int> f[22]; void work() {
scanf("%d%d%d", &n, &m, &k);
REP(i,1,n) scanf("%s", a[i]+1);
if (n<m) {
swap(n,m);
REP(i,1,n) REP(j,1,m) b[i][j]=a[j][i];
REP(i,1,n) REP(j,1,m) a[i][j]=b[i][j];
}
int mx = base[1][m]-1;
REP(i,1,n) f[i].clear();
REP(i,0,n) REP(j,0,mx) dp[i][j]=0;
REP(i,1,k) ans[i]=0;
REP(i,1,n) REP(j,1,m) if (a[i][j]=='Q') f[i].pb(j-1);
dp[0][0] = 1;
REP(i,1,n) REP(s,0,mx) if (dp[i-1][s]) {
int ss = s;
for (int j:f[i]) if (g[s][j]<2) {
dp[i][s-base[g[s][j]][j]+base[2][j]]+=dp[i-1][s];
if (!g[s][j]) ss += base[1][j];
}
dp[i][ss] += dp[i-1][s];
}
REP(s,0,mx) if (dp[n][s]) {
int f = 1, cnt = 0;
REP(j,0,m-1) {
if (g[s][j]==1) {f=0;break;}
if (g[s][j]==2) ++cnt;
}
if (f) ans[cnt] += dp[n][s];
}
ll mod = 1e12;
REP(i,1,k) {
__int128 t = (__int128)ans[i]*fac[i];
if (t>mod) printf("%lld%012lld\n",(ll)(t/mod),(ll)(t%mod));
else printf("%lld\n", (ll)t);
}
} int main() {
fac[0]=base[1][0]=1,base[2][0]=2;
REP(i,1,12) fac[i]=fac[i-1]*i;
REP(i,1,12) base[1][i]=base[1][i-1]*3;
REP(i,1,12) base[2][i]=base[2][i-1]*3;
REP(i,0,N-1) {
int t = i;
REP(j,0,12) g[i][j]=t%3, t/=3;
}
scanf("%d", &t);
REP(i,1,t) work();
}
hdu 2018多校8的更多相关文章
- HDU 2018 DP
A - 母牛的故事 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- Time Zone 【模拟时区转换】(HDU暑假2018多校第一场)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6308 Time Zone Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 6312 - Game - [博弈][杭电2018多校赛2]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6312 Problem Description Alice and Bob are playing a ...
- HDU 6318 - Swaps and Inversions - [离散化+树状数组求逆序数][杭电2018多校赛2]
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=6318 Problem Description Long long ago, there was an ...
- 2018多校第十场 HDU 6430 (线段树合并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6430 题意:一棵树上每个节点权值为v[i],每个节点的heard值是:以它为LCA的两个节点的GCD的 ...
- 2018多校第九场1004(HDU 6415) DP
本以为是个找规律的题一直没找出来... 题目:给你一个n*m的矩阵和1-n*m个数,问有多少种情况满足纳什均衡的点只有一个.纳什均衡点是指这个元素在所在行和所在列都是最大的. 思路:吉老师直播的思路: ...
- HDU 6397(2018多校第8场1001) Character Encoding 容斥
听了杜教的直播后知道了怎么做,有两种方法,一种构造函数(现在太菜了,听不懂,以后再补),一种容斥原理. 知识补充1:若x1,x2,.....xn均大于等于0,则x1+x2+...+xn=k的方案数是C ...
- HDU 6395(2018多校第7场1010)Sequence
不久前做过POJ3070,所以知道这题要用矩阵快速幂优化,但是这个题的递推公式中有一项⌊p/n⌋,场上就不会了... 下来才知道要用分块矩阵快速幂,因为⌊p/n⌋最多有2√p块,可以对每一块使用快速幂 ...
- HDU 6396(2018多校第七场1011) Swordsman
场上场下各种TLE到怀疑人生...经过大佬指点之后才知道要用fread才能过,一般的快读不行... 题意:一个剑客打小怪兽,有n头小怪兽,剑客和小怪兽有m个属性.只有剑客的m个属性都大于等于某个小怪兽 ...
随机推荐
- python实现常量const
新建const.py: #-*-coding:UTF-8-*- #Filename: const.py # 定义一个常量类实现常量的功能 # # 该类定义了一个方法__setattr()__,和一个异 ...
- JS重要的内置对象
Array对象: 属性: .length 获得数组的长度: 方法: .concat() 连接内容或者数组,组成新的数组: .join(n) 用n连接数组的每一项组成字符串,可以是空字符串: ...
- vue-cli使用
vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目,GitHub地址是:https://github.com/vuejs/vue-cli 一.安 ...
- 解决“ 故障模块名称: clr.dll ”
错误内容: 微软的错误说明:http://support.microsoft.com/kb/2640103/zh-cn 类似下面的错误: 错误应用程序名称:xxx.exe,版本: 1.0.0.0,时间 ...
- sqlserver 判断各种不存在
判断数据库是否存在 if exists (select * from dbo.sysobjects where name = '数据库名') --drop database [数据库名] 判断表是否存 ...
- Linux下Oracle常用命令
1. 备份表 exp database_user/pass tables='(table1,table2)' file=filename.dmp(例如:exp ismrenbao/iflytek ta ...
- PHP开发者成长图
作为PHP开发者,根据自己给自己的定位和这幅图,是否觉得自己还需要比平时更努力呢~
- django multidb --- router
之前一篇随笔, 提到了django中怎么使用多数据库, 但是在实际工程中遇到了一个问题,就是admin指定了使用某库, 在测试环境上没问题, 当部署后(库也变动了位置), 修改一个admin的mode ...
- 20145303刘俊谦 《网络对抗》Exp9 Web安全基础实践
20145303刘俊谦 <网络对抗>Exp9 Web安全基础实践 基础问题回答 1.SQL注入原理,如何防御 SQL注入 就是通过把SQL命令插入到"Web表单递交"或 ...
- 求LCA练习+部分算法复习 2017.1.22
第一题就LCA即可.不过推荐用Tarjan(最快,常数很小).然后Tarjan的时候顺便就出一个dist[i],表示i节点到根节点的距离.求出了LCA,那么两点间的距离就为dist[u] + dist ...