链接: https://www.nowcoder.com/acm/contest/139/F 题意: 分析: 转载自:http://tokitsukaze.live/2018/07/19/2018niuke1.F/ 代码: #include <cstdio> #include <cassert> #include <algorithm> using namespace std; /// 注意mod,使用前须调用一次 polysum::init(int M); names…
链接: https://www.nowcoder.com/acm/contest/139/I 题意: 给出一个n(1≤n≤5e4)个字符的字符串s(si ∈ {a,b,c}),求最多可以从n*(n+1)/2个子串中选出多少个子串,使得它们互不同构.同构是指存在一个映射f,使得字符串a的每个字符都可以映射成字符串b的对应字符.例如ab与ac.ba.bc.ca.cb都是同构的. 分析: 以字符串abba为例:现在只考虑这个字符串的2个子串ab和ba,如果不考虑重构,有2个子串,否则,只有1个子串.这…
链接: https://www.nowcoder.com/acm/contest/139/J 题意: 给出n个整数的序列a(1≤ai≤n)和q个询问(1≤n,q≤1e5),每个询问包含两个整数L和R(1≤L,R≤n).对于每个询问,输出a[1...L]和a[R...n]的不同数字的个数. 分析: 将原数组复制一份拼接到末尾,把询问a[1...L]和a[R...n]转换为询问a[R...L+n].设kind[i]为a[1...i]出现的数字种类,则询问a[L...R]的答案为 kind[R] -…
链接: https://www.nowcoder.com/acm/contest/139/E 题意: 给出一个n(1≤n≤1e5)个整数(范围是1至10)的序列,求从中移除m(1≤m≤min(n-1,10))个整数后不同序列的数量模(1e9+7). 分析: 设d[i][t]表示当前匹配到了第i个数字,总共删了t个数字时的不同序列的数量.先不考虑序列重复的情况,则d[i][t] = d[i-1][t](不删第i个数字)+ d[i-1][t-1](删第i个数字).现在考虑减去重复的序列.设有序列ab…
链接: https://www.nowcoder.com/acm/contest/139/D 题意: 两个无向简单图都有n(1≤n≤8)个顶点,图G1有m1条边,图G2有m2条边,问G2有多少个子图与G1同构. 分析: 枚举所有的映射方案,再判断合法性,把每一合法映射所用到的边状态压缩一下,装到集合里去重即可. 代码: import java.io.*; import java.util.*; public class Main { Scanner cin = new Scanner(new B…
链接: https://www.nowcoder.com/acm/contest/139/B 题意: 求满足以下条件的n*n矩阵A的数量模m:A(i,j) ∈ {0,1,2}, 1≤i,j≤n.A(i,j) = A(j,i), 1≤i,j≤n.A(i,1) + A(i,2) + ... + A(i,n) = 2, 1≤i≤n.A(1,1) = A(2,2) = ... = A(n,n) = 0.其中1≤n≤1e5, 1≤m≤1e9. 分析: 把矩阵看成无向图的邻接矩阵,即要求所有点度为2,即每个…
链接: https://www.nowcoder.com/acm/contest/139/A 题意: 求满足以下条件的n*m矩阵A的数量模(1e9+7):A(i,j) ∈ {0,1,2}, 1≤i≤n, 1≤j≤m.A(i,j) ≤ A(i+1,j), 1≤i<n, 1≤j≤m.A(i,j) ≤ A(i,j+1), 1≤i≤n, 1≤j<m.其中1 ≤ n,m ≤ 1e3. 分析: 考虑01和12的分界线,是(n,0)到(0,m)的两条不相交(可重合)路径.平移其中一条变成(n+1,1)到(1…
链接:https://ac.nowcoder.com/acm/contest/882/D来源:牛客网 Given a vertex-weighted graph with N vertices, find out the K-th minimum weighted clique. A subset of vertices of an undirected graph is called clique if and only if every two distinct vertices in th…
题目链接:https://ac.nowcoder.com/acm/contest/889/H 题意:给出n颗竹子的高度,q次询问,每次询问给出l,r,x,y,每次选取[l,r]中的竹子,砍y次砍掉所有竹子,每次砍下来的竹子长度和是相同的,问你第x次应该砍在哪个高度上 解题思路:由于总共砍的次数已经给出,因此我们可以知道砍x次总共砍的量 Total = $\sum\limits_{i=l}^{r}$h[i]*x/y,那么问题就变成了一个方程$\sum\limits_{i=l}^{r}$max(0,…
题目:戳这里 思路来源:视频讲解 题意:有n个箱子按1...n标号,每个箱子有大小为di的钻石概率为pi,我们初始有个大小为0的钻石,从1到n按顺序打开箱子,遇到比手中大的箱子就换,求交换次数的数学期望. 解题思路:这题跟上题[点这里]很像,都是找到一个子状态,利用数学期望的可加性,处理求和即可.这里的子状态为每一次交换的状态,即 前j个比i大的概率积用树状数组维护. 附ac代码: 1 #include <cstdio> 2 #include <cstdlib> 3 #includ…