loj2061 「HAOI2016」放棋子】的更多相关文章

答案就是错排数 n = int(input()) f = [0] * 205 f[0] = 1 for i in range(2, n+1): f[i] = (i-1) * (f[i-1] + f[i-2]) print(f[n])…
题解 水题,可惜要写高精度有点烦 一看障碍物的摆放方式和最后的答案没有关系,于是干脆不读了,直接二项式反演可以得到 设\(g_k\)为一种摆放方式恰好占了k个障碍物 \(f_k = \sum_{i = k}^{n} \binom{i}{k} g_{i}\) 可以得到 \(g_0 = \sum_{k = 0}^{n} (-1)^{k} \binom{k}{0} f_{i}\) \(g_0 = \sum_{k = 0}^{n} (-1)^{k} \binom{n}{k} (n - k)!\) 拆开可…
题目链接 戳这 前置知识 错位排序 Solution 我们可以观察发现,每一行的障碍位置对答案并没有影响. 于是我们可以将此时的矩阵化成如下形式: \[ 1\ \ 0\ \ 0\ \ 0\\ 0\ \ 1\ \ 0\ \ 0\\ 0\ \ 0\ \ 1\ \ 0\\ 0\ \ 0\ \ 0\ \ 1 \] 此时障碍列的排列为: 1 2 3 4 于是我们问题可以转化为: 从每行中选出一个\(1~n\)的没出现的书且和障碍不相同 即:问一个\(1~n\)的数列的排列与原数列的位置都不相同的个数 所以…
「HAOI2016」字符合并 题意: ​ 有一个长度为\(n\)的\(01\)串,你可以每次将相邻的\(k\)个字符合并,得到一个新的字符并获得一定分数.得到的新字符和分数由这\(k\)个字符确定.你需要求出你能获得的最大分数.(\(n\le 300,k\leq8\)) 题解: ​ 关键是要想到区间dp.记\(f[i][j][s]\),表示区间\([i,j]\),合并后状态为\(s\)的最大值.注意到长度模\(k\)余\(1\)的区间都可合并成一个字符,那么转移枚举的中点每次可以跳动\(k-1\…
题面 题解 任意两个障碍不在同一列 要求你放$N$个棋子也满足每行只有一枚棋子,每列只有一枚棋子的限制. 这™不就是个错排吗??? $$ h_i=(n-1)(h_{i-1}+h_{i-2}),h_1=0,h_2=1 $$ 写个高精度就好了... 代码 #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> #define RG register inline int re…
题解 做后缀自动机题要一点脑洞,脑洞一开,就过了 我们显然要拿第二个串跑第一个串的后缀自动机 我们可以求出第二个串每个位置匹配到的节点,和匹配的长度L 那么我们统计一个后缀树上的根缀和,表示这样个节点的路径字符串的所有后缀在串中出现过多少次(路径字符串就是根到这个点的路径中等于这个节点len值的串) 统计方法是p->sum = p->par->sum + p->cnt * (p->len - p->par->len) 然后我们匹配到的位置不一定完整匹配了路径字符串…
题解 dp[i][j][S]表示区间[i,j]内剩余的数位状压后为S的最大值 这样转移起来不就是\(n^3 2^8\)了吗 冷静一下,我们可以发现一段区间内剩下的数位的个数是一定的,也就是我们可以在枚举位数上减少一定复杂度 我们转移的时候枚举一个末尾,也就是 \(dp[i][j][S] = dp[i][k][S >> 1] + dp[k + 1][j][S & 1]\) 我们还需要保证[k + 1,j]的长度-1后是(K - 1)的倍数 这样的话最后跑得还是很快的 代码 #includ…
题解 我对莫队真是一无所知 这个东西显然可以用圆方树转成一个dfs序列 然后呢,用莫队计算每个询问区间的每个数出现的次数,从而顺带计算每个数字的奇偶性 但是我们要查的数字也用一个范围,可以直接用分块维护,修改\(O(1)\)查询\(O(n)\) 代码 #include <bits/stdc++.h> #define enter putchar('\n') #define space putchar(' ') #define pii pair<int,int> #define fi…
ref #include <iostream> #include <cstring> #include <cstdio> using namespace std; typedef long long ll; int n, k, a[305], c[305]; ll w[305], dp[305][305][265], g[2]; int main(){ memset(dp, 0xcf, sizeof(dp)); cin>>n>>k; for(in…
题目链接 解题思路 简单的DAG上DP即可. 参考程序 #include <bits/stdc++.h> using namespace std; const int Maxn = 100010; const int Maxm = 200010; struct edge { int To, Next; }; edge Edge[ Maxm ]; int Start[ Maxn ], Used; int n, m, In[ Maxn ], Out[ Maxn ], Dp[ Maxn ], L,…
知识点: SA,线段树,广义 SAM 原题面 Loj Luogu 给定两字符串 \(S_1, S_2\),求出在两字符串中各取一个子串,使得这两个子串相同的方案数. 两方案不同当且仅当这两个子串中有一个位置不同. \(1\le |S_1|, |S_2|\le 2\times 10^5\) 分析题意 线段树 考察对 \(\operatorname{lcp}\) 单调性的理解. \(S_1\) 加个终止符,\(S_2\) 串扔到 \(S_1\) 后面,跑 SA. 显然,答案即后半段的后缀,与前半段的…
知识点: SA,线段树,单调栈 原题面 Loj Luogu 题意简述 给定一长度为 \(n\) 的字符串 \(S\),令 \(T_i\) 表示从第 \(i\) 个字符开始的后缀,求: \[\sum_{1\le i<j\le n}\{\operatorname{len}(T_i) +\operatorname{len}(T_j) - 2\times \operatorname{lcp} (T_i,T_j)\} \] \(\operatorname{len}(a)\) 表示字符串 \(a\) 的长度…
[BZOJ4563][Haoi2016]放棋子 Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子的限制,求有多少种方案. Input 第一行一个N,接下来一个N*N的矩阵.N<=200,0表示没有障碍,1表示有障碍,输入格式参考样例 Output 一个整数,即合法的方案数. Sample Input 2 0 1 1 0…
P3182 [HAOI2016]放棋子 题目描述 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子的限制,求有多少种方案. 输入输出格式 输入格式: 第一行一个N,接下来一个N*N的矩阵.N<=200,0表示没有障碍,1表示有障碍,输入格式参考样例 输出格式: 一个整数,即合法的方案数. 输入输出样例 输入样例#1: 2 0 1 1 0 输出…
4563: [Haoi2016]放棋子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 387  Solved: 247[Submit][Status][Discuss] Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在 这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子 的限制,求有多少种方案.   Input 第一行…
4563: [Haoi2016]放棋子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 440  Solved: 285[Submit][Status][Discuss] Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在 这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子 的限制,求有多少种方案.   Input 第一行…
Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在 这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子 的限制,求有多少种方案.   Input 第一行一个N,接下来一个N*N的矩阵.N<=200,0表示没有障碍,1表示有障碍,输入格式参考样例   Output 一个整数,即合法的方案数. Sample Input 2 0 1 1 0 Sample Output 1  …
题目 Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子的限制,求有多少种方案. Input 第一行一个N,接下来一个N*N的矩阵.N<=200,0表示没有障碍,1表示有障碍, Output 一个整数,即合法的方案数. Solution 我们先来科普一下错排问题. 错排问题指考虑一个有n个元素的排列,若一个排列中所有的元…
https://www.lydsy.com/JudgeOnline/problem.php?id=4563 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子的限制,求有多少种方案. 假设最开始棋子都放在障碍上,然后将所有行压成一行,那么下面的问题就是有多少种方法使得棋子不放在自己原来的位置上并且不能与别的棋子重合? 这就是一个错排问题了,高精…
Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 389  Solved: 248[Submit][Status][Discuss] Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在 这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子 的限制,求有多少种方案.   Input 第一行一个N,接下来一个N*N的矩阵.N<=2…
Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 387  Solved: 247[Submit][Status][Discuss] Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在 这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子 的限制,求有多少种方案.   Input 第一行一个N,接下来一个N*N的矩阵.N<=2…
我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博客,整了篇论文,管他三七二十一,放到 arxiv 上自嗨一番(如果不是自鸣得意的话)再说…… 话说在优酷看了个电影<北京爱情故事>.记得当初电视剧的主题曲满大街放的时候,我还不知道有这么一电视剧:机缘巧合,某次宿舍里见朋友在看,才跟着一起看了两集,觉得不错,不过,之后自己也没再看过.今儿晚上看了同…
Cloud Insight 此前已然支持 Linux 操作系统,支持20多中数据库中间件等组件,多种操作,多种搭配,服务器监控玩的其乐无穷啊!但想想还有许多 Windows 的小伙伴没有体验过,所以在程序员哥哥的努力加班加点的赶工下,我们隆重推出了监控 Windows 系统的功能. 安装方法 在 OneAPM Ci 官网注册,登录,进入 Ci 首页 选择合适的版本(32/64),下载探针,点击安装 或者下载探针,在 cmd.exe 里面执行命令行进行安装 是不是简单的让人无法相信,只要这样简单的…
本文由CrowHawk翻译,是Java GC调优的经典佳作. 本文翻译自Sangmin Lee发表在Cubrid上的"Become a Java GC Expert"系列文章的第三篇<How to Tune Java Garbage Collection>,本文的作者是韩国人,写在JDK 1.8发布之前,虽然有些地方有些许过时,但整体内容还是非常有价值的.译者此前也看到有人翻译了本文,发现其中有许多错漏生硬和语焉不详之处,因此决定自己翻译一份,供大家分享. 本文是"…
「luogu2569」[ZJOI2006]书架 题目大意 给定一个长度为 \(n\) 序列,序列中第 \(i\) 个元素有编号 \(a_i(a_i \in \Z \cap [1,n])\),需要支持五种操作: \(Top\) \(S\) --表示把编号为 \(S\) 的书放在最上面: \(Bottom\) \(S\)--表示把编号为 \(S\) 的书放在最下面: \(Insert\) \(S\) \(T\)--\(T \in \{-1,0,1\}\),若编号为 \(S\) 的书上面有 \(X\)…
「SCOI2016」围棋 打CF后困不拉基的,搞了一上午... 考虑直接状压棋子,然后发现会t 考虑我们需要上一行的状态本质上是某个位置为末尾是否可以匹配第一行的串 于是状态可以\(2^m\)压住了,但还是会T 考虑到复杂度瓶颈在于每行的状态都要枚举上一行的状态,是按行转移的. 那么如果做一个轮廓线,就可以按格子转移 考虑有那些状态,当前格子\(i,j\),当前轮廓线是否可以匹配第一行的串的状态\(s\) 然后你试试发现如果想好好转移 得存一个\((i,j)\)匹配到第一行串的位置\(x\),和…
题意 题目描述 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来,更别说和别人打仗了. 在打仗之前,幽香现在面临一个非常基本的管理问题需要解决. 整个地图是一个树结构,一共有n块空地,这些空地被n-1条带权边连接起来,使得每两个点之间有一条唯一的路径将它们连接起来. 在游戏中,幽香可能在空地上增加或者减少一些军队.同时,幽香可以在一个空地上放置一个补给站. 如果补给站在点…
「NOI2018」你的名字 题目描述 小A 被选为了\(ION2018\) 的出题人,他精心准备了一道质量十分高的题目,且已经 把除了题目命名以外的工作都做好了. 由于\(ION\) 已经举办了很多届,所以在题目命名上也是有规定的,\(ION\) 命题手册规 定:每年由命题委员会规定一个小写字母字符串,我们称之为那一年的命名串,要求每道题的名字必须是那一年的命名串的一个非空连续子串,且不能和前一年的任何一道题目的名字相同. 由于一些特殊的原因,小A 不知道\(ION2017\) 每道题的名字,但…
「CSA49」Card Collecting Game 题目大意:有 \(n\) 种卡片,每种有 \(b_i\) 张,如果一个人集齐 \(k\) 张第 \(i\) 种卡片,那么其能获得的得分是 \(\lfloor\frac{k}{a_i}\rfloor \times c_i\) ,现在A要将所有卡片分成大小相同两堆,保证总卡片数量是偶数.A与B玩游戏,第一堆A先手轮流取,第二堆B先手轮流取,A要最大化自己的得分,B要最小化A的得分,求A能得到的最大得分. 解题思路:首先放在两堆的卡片都可以模 \…
「UOJ351」新年的叶子 题目描述 有一棵大小为 \(n\) 的树,每次随机将一个叶子染黑,可以重复染,问期望染多少次后树的直径会缩小. \(1 \leq n \leq 5 \times 10^5\) 解题思路 : 首先要利用一个经典的结论,树的所有直径的中心为同一个点/边.不妨给每条边加一个虚拟点,这样整颗树的直径就只会交于同一个点了. 接下来考虑树的直径是由中心的两个儿子的两个深度为 \(maxdep\) 的叶子构成的,所以问题等价于将叶子根据中心的儿子分成若干个集合,对于所有染色方案求染…