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

  1. HDU 2018 DP

    A - 母牛的故事 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit St ...

  2. Time Zone 【模拟时区转换】(HDU暑假2018多校第一场)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6308 Time Zone Time Limit: 2000/1000 MS (Java/Others)  ...

  3. HDU 6312 - Game - [博弈][杭电2018多校赛2]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6312 Problem Description Alice and Bob are playing a ...

  4. HDU 6318 - Swaps and Inversions - [离散化+树状数组求逆序数][杭电2018多校赛2]

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=6318 Problem Description Long long ago, there was an ...

  5. 2018多校第十场 HDU 6430 (线段树合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6430 题意:一棵树上每个节点权值为v[i],每个节点的heard值是:以它为LCA的两个节点的GCD的 ...

  6. 2018多校第九场1004(HDU 6415) DP

    本以为是个找规律的题一直没找出来... 题目:给你一个n*m的矩阵和1-n*m个数,问有多少种情况满足纳什均衡的点只有一个.纳什均衡点是指这个元素在所在行和所在列都是最大的. 思路:吉老师直播的思路: ...

  7. HDU 6397(2018多校第8场1001) Character Encoding 容斥

    听了杜教的直播后知道了怎么做,有两种方法,一种构造函数(现在太菜了,听不懂,以后再补),一种容斥原理. 知识补充1:若x1,x2,.....xn均大于等于0,则x1+x2+...+xn=k的方案数是C ...

  8. HDU 6395(2018多校第7场1010)Sequence

    不久前做过POJ3070,所以知道这题要用矩阵快速幂优化,但是这个题的递推公式中有一项⌊p/n⌋,场上就不会了... 下来才知道要用分块矩阵快速幂,因为⌊p/n⌋最多有2√p块,可以对每一块使用快速幂 ...

  9. HDU 6396(2018多校第七场1011) Swordsman

    场上场下各种TLE到怀疑人生...经过大佬指点之后才知道要用fread才能过,一般的快读不行... 题意:一个剑客打小怪兽,有n头小怪兽,剑客和小怪兽有m个属性.只有剑客的m个属性都大于等于某个小怪兽 ...

随机推荐

  1. 调用spark API,监控任务的进度

    我们现在需要监控datapre0这个任务每一次执行的进度,操作如下: 1. 如图所示,打开spark管理页面,找到对应的任务,点击任务名datapre0 2. 进去之后,获得对应IP和端口  3. 访 ...

  2. centos7.3安装redis

    yum install epel-release yum install redis 如果支持从其他机器能访问,需要修改配置文件 /etc/redis.conf,注释掉 bin 127.0.0.1 如 ...

  3. Xcode10.x适配的部分问题

    因为我们项目是一个Workspace,由若干个库组成(组件化比较碎),又涉及到海外和国内(存在很多差异性),整个项目的编译是由每个库的脚本(每个库生成会支持32位和64位,每次编译前会清除历史缓存), ...

  4. python之路----面向对象的封装特性

    封装 [封装] 隐藏对象的属性和实现细节,仅对外提供公共访问方式. 广义上面向对象的封装 :代码的保护,面向对象的思想本身就是一种只让自己的对象能调用自己类中的方法 狭义上的封装 —— 面向对象的三大 ...

  5. Linux 中的 grep 命令

    一,grep命令有什么用 个人觉得grep命令就是一个对文本或输出进行匹配并控制输出的一个工具,看一下下面的参数,部分翻译了,有不对的地方,还请指正: grep --help 匹配模式选择: -E,  ...

  6. OpenCV相关网站推荐(Informative websites related to OpenCV)

    原文来自:http://answers.opencv.org/question/69691/informative-websites-related-to-opencv/ i think it wil ...

  7. 20145321《网络对抗》Exp2 后门原理与实践

    实验内容 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划启动 (3)使用MSF meterpreter生成可执行文件,利用ncat或 ...

  8. poj 2777 Count Color - 线段树 - 位运算优化

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 42472   Accepted: 12850 Description Cho ...

  9. 过滤Windows文件名中的非法字符

    转载:http://blog.csdn.net/infoworld/article/details/42033097 场景: 1. 通常生成文件时需要一个文件名,而生成文件名的方式可能是通过用户输入的 ...

  10. 关于即来即停app的功能

    Asmallpark软件接口文档说明 编码均采用UTF-8格式传输全部为http,POST请求状态码:200  操作成功    100  服务器异常,稍后再试  404  请求非法  402  数据库 ...