2020 CCPC Wannafly Winter Camp Day1 C. 染色图 定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任何一条边 (u,v),都有 f(u)≠f(v). 定义函数 g(n,k) 的值为所有包含 n 个点的无自环.无重边的 k 可染色无向图中的边数最大值.举例来说,g(3,1)=0,g(3,2)=2,g(3,3)=3. 现在给出三个整数 n,l,r,你需要求解:\((\sum_{i=l}^rg(n,i)…
题目链接:https://zhixincode.com/contest/14/problem/D?problem_id=206 样例输入 1  5 5 1 2 1 1 3 1 2 4 1 2 5 1 1 5 1 样例输出 1 20 样例输入 2  5 10 1 2 1 1 3 2 1 4 3 1 5 4 2 3 5 2 4 6 2 5 7 3 4 8 3 5 9 4 5 10 样例输出 2 146 题解: 首先,删除一条边不可能使得任意两座城市的最短距离变得更近,所以尽可能地多删除边不会有任何坏…
点此看题面 大致题意: 给你一张图,定义\(dis(i,j)\)为\(i\)与\(j\)的最短距离,现要求删去若干条边,使得图仍然联通,且\(\sum_{i=1}^n\sum_{j=i+1}^ndis(i,j)\)最大. 一个贪心的思想 考虑到要使点与点间的距离最大,则多删边肯定是更优的. 又考虑图必须联通,则最后的图肯定是一棵树. 状压\(DP\) 看到数据范围如此之小(\(N\le14\)),自然会想到状压\(DP\)啦. 我们可以设\(f_{i,x}\)表示子集\(i\)在强制以\(x\)…
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog @ Problem:传送门  Portal  原题目描述在最下面.  简单的说,每个点是一个矩阵,区间赋值和区间求积. Solution: \(div2\)版本就\(O(n*m*9)\)暴力更新暴力矩阵乘法求答案就行了,代码挺短的,有需要的话去另一篇博客里有代码. \(div1\)题解就上面这个,相信大家看完应该都能\(ac\). 本题只有两种操作,区间赋值和区间求和(矩阵的积).很…
题目链接:https://zhixincode.com/contest/14/problem/I?problem_id=211 样例输入 1  3 5 2 1 1 2 1 2 1 1 2 3 2 1 样例输出 1 27 9 6 题解: 首先,比较明显地是,每进行一次操作 $1$,对于目前的卡牌分配情况的种数,其中的 $1/3$ 种是被撤掉位子的人留下,其余 $2/3$ 种是“擂主”留下. 而且,进行完一次操作 $1$ 后,“擂主”位子上分配到的卡牌,石头剪刀布的数目比依然是均等的,因此不会影响后…
题目链接:https://zhixincode.com/contest/14/problem/A?problem_id=203 time limit per test: 1 secondmemory limit per test: 256 megabytesinput: standard inputoutput: standard output 样例输入 1  5 5 3 4 1 2 样例输出 1 3 4 2 5 1 题解: 首先例如 $p = [3,4,2,1]$,则 $A(p) = [3,3…
点此看题面 大致题意:已知 \(p\)为\(n\)的一个排列,定义\(A(p)_i=min_{j=1}^ip_j\),若用\(q_i\)表示\(p\)第\(i\)小的前缀的长度(以值为第一关键字,下标为第二关键字),先给你\(q\),请你求出字典序最小的\(p\). 简单分析·基本结论 让我们来仔细研究一下样例: \(i\) \(1\) \(2\) \(3\) \(4\) \(5\) \(p_i\) \(3\) \(4\) \(2\) \(5\) \(1\) \(A(p)_i\) \(3\) \…
点此看题面 大致题意: 让你求出\(\sum_{i=1}^n\sum_{j=1}^n\mu(gcd(i,j))\). 莫比乌斯反演 这种题目,一看就是莫比乌斯反演啊!(连莫比乌斯函数都有) 关于莫比乌斯反演,详见这篇博客:初学莫比乌斯反演. 推式子 下面让我们来推式子. 首先,我们采用解决这种问题的常用套路,来枚举\(gcd\),就能得到这样一个式子: \[\sum_{d=1}^n\sum_{i=1}^{\lfloor\frac nd\rfloor}\sum_{j=1}^{\lfloor\fra…
点此看题面 大致题意: 有\(n\)个人,第\(i\)个人坐在编号为\(i\)的座位上,每个人等概率有石头.剪刀.布中的一张卡片.有两种操作:第一种是第\(y\)个人挑战第\(x\)个人,如果胜利则\(x\)被淘汰,\(y\)坐到\(x\)的座位上,否则\(y\)被淘汰:第二种是询问第\(x\)个人存活的概率. 一个简单的结论 考虑被别人挑战,平或胜都不会被淘汰,因此存活率为\(\frac 23\). 考虑挑战别人,只有胜才不会被淘汰,因此存活率为\(\frac 13\). 因此,如果有一个人被…
Day 1, Div 2, Prob. B - 吃豆豆 题目大意 wls有一个\(n\)行\(m\)列的棋盘,对于第\(i\)行第\(j\)列的格子,每过\(T[i][j]\)秒会在上面出现一个糖果,糖果只存在一秒,下一秒就会消失. 假如wls第\(k\)秒在第\(i\)行第\(j\)列的格子上,满足\(T[i][j]|k\),则wls会得到一个糖果. wls每一秒只可以上下左右移动一格或停在原地. 请问wls从指定的\(S(xs,ys)​\)出发到达指定的\(T(xt,yt)​\),并且在路上…
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog @ Problem:传送门  原题目描述在最下面.  对给定的式子算解.  \(0\leq k\leq n+m,c_k=(\sum_{i+j=k}i\times j\times \sigma_{a_i,b_j}) mod\;998244353\),其中\(当且仅当a=b时,\sigma_{a_i,b_j}=1.\) Solution:  我们发现只有当\(a_i\)和\(b_j\)相…
#include<bits/stdc++.h> #define forn(i, n) for (int i = 0; i < int(n); i++) #define fore(i, s, t) for (int i = s; i < (int)t; i++) #define fi first #define se second #define all(x) x.begin(),x.end() #define pf2(x,y) printf("%d %d\n",…
题目链接:K小数查询 题意:给你一个长度为$n$序列$A$,有$m$个操作,操作分为两种: 输入$x,y,c$,表示对$i\in[x,y] $,令$A_{i}=min(A_{i},c)$ 输入$x,y,k$,表示询问区间$[x,y]$中的第$k$小数 思路:数据范围不是很大,可以分块来做,记录每个块已经更新过的最小值$imin[]$,询问时二分答案,然后求出$[x,y]$区间中小于等于$mid$的数的个数$cnt$,通过判断$cnt$与$k$的大小来改变$l,r$即可 #include <ios…
题目传送门 sol:先通过AC自动机构建字典,用$dp[i]$表示长串前$i$位的最小代价,若有一个单词$s$是长串的前$i$项的后缀,那么可以用$dp[i - len(s)] + val(s)$转移到$dp[i]$. AC自动机 #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int, int> PII; ; const LL INF = 0x3f3f3f3f3f3f…
题目传送门 sol:二分答案$K$,算大于$K$的乘积有多少个.关键在于怎么算这个个数,官方题解上给出的复杂度是$O(nlogn)$,那么计算个数的复杂度是$O(n)$的.感觉写着有点困难,自己写了一个复杂度是$O(nlog^{2}n)$,也够AC了.有正有负,控制边界有点难度. 二分答案 #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int, int> PII; ;…
给定一个全排列,对于它的每一个子序列 \(s[1..p]\),对于每一个 \(i \in [1,p-1]\),给 \(s[i],s[i+1]\) 间的每一个值对应的桶 \(+1\),求最终每个桶的值. Solution 对于一对 \((i,j), i<j, p[i]<p[j]\),其对 \(k \in (p[i],p[j])\) 有 \(2^{(i-1)+(n-j)}\) 的贡献 于是我们得到了 \(O(n^2 \log n)\) 暴力 考虑枚举左侧的 \(i\),它会与右侧 \(p[j]&g…
给定 \(m\) 个询问,每个询问是一个区间 \([l,r]\),你需要通过自由地设定每个节点的 \(mid\),设计一种"自适应线段树",使得在这个线段树上跑这 \(m\) 个区间询问时,需要访问节点的次数最少. Solution 对于询问 \([ql,qr]\) 和结点 \([l,r]\) 如果 \([ql,qr]\) 与 \([l,r]\) 相交但不包含,贡献为 \(1\) 如果 \([ql,qr]\) 包含 \([l,r]\) 如果 \(l=r\),则贡献 \(1\) 如果 \…
给定 \(n \leq 10^7\),求所有 \(n\) 的全排列的逆序对个数的 \(k \leq 100\) 次方和 Solution \(f[i][j]\) 表示 \(i\) 个元素,逆序对个数为 \(j\) 的全排列个数,则 \[ f[i][j]=\sum_{s=0}^{i-1} f[i-1][j-s] \] 设 \(g[i]\) 为 \(n=i\) 的答案,那么 \[ g[i]=\sum_{j=0}^\frac{i(i-1)}{2} f[i][j]\cdot j^k \] 暴力计算则复杂…
2019 wannafly winter camp Name Rank Solved A B C D E F G H I J K day1 9 5/11 O O O O O day2 5 3/11 O O O day3 6 6/10 O O O O O Ø day4 5 6/11 O O O O O O day5 3 4/10 O O O O day7 7 7/10 O O O O O O O day8 7 5/10 O O O O O…
2019 wannafly winter camp day 3 J 操作S等价于将S串取反,然后依次遍历取反后的串,每次加入新字符a,当前的串是T,那么这次操作之后的串就是TaT.这是第一次转化. 涉及到子序列的题目的一个常用技巧是:对于子序列来说,贪心的能取就取. 因此本题对于每个字符串,需要维护的东西有f[i][j]表示第一次取i,下一次想取j的方案数:g[i]表示第一次取i的方案数:vis[i]表示当前字符i在这个串中有没有出现.具体的转移需要仔细讨论.…
线段树优化建图,用于区间到区间建边时降低空间复杂度 建立两颗线段树,一颗in, 代表进入这个区间,一颗out,代表从这个区间出去 in树从父亲向儿子建边,代表宏观进入整个区间,不向下寻找 out树从儿子向父亲建边,代表出去 in树向out树对应点建边,代表从这个点进去可以从它出去 建真正的边时: 1: 单点向单点: out树对应点向in树对应点建边 2: 单点向区间: out树对应点向in树对应区间建边 3: 区间向单点: out树对应区间向in树对应点建边 4: 区间向区间: out树区间对新…
目录 day1 F div1 爬爬爬山 (最短路) B div2 吃豆豆 (dp) J div2 夺宝奇兵(暴力) J div1 夺宝奇兵 (权值线段树) C div1 拆拆拆数 E div1 流流流动(冰雹猜想 ,树形dp) I div2 起起落落 (dp) I div1 起起落落 (权值线段树优化dp) day2 A div2 Erase Nodes(贪心) B div2 Erase Numbers III(贪心) H div1&2 Cosmic Cleaner(计算几何) K div1 S…
Replay Dup4: 没想清楚就动手写? 写了两百行发现没用?想的还是不够仔细啊. 要有莽一莽的精神 X: 感觉今天没啥输出啊, 就推了个公式?抄了个板子, 然后就一直自闭A. 语文差,题目没理解,导致写了接近三小时的A吧, 最后看了一眼群, 发现自己理解错了. 以及感觉自己最近不会交流,有点毒瘤了. A:二十四点* Solved. 思路: Div2 暴力跑? #include<bits/stdc++.h> using namespace std; int n; ]; int main()…
solve 4/11 补题:5/11 A 二十四点* Code:pai爷  zz Thinking :pai爷 打表找规律,1张牌 10个不可能的 2张牌有 43 种不可能的 3张牌 有74 种不可能的 4 张牌有 5 种不可能的 #include<iostream> #include<cstring> #include<cmath> #include<cstdlib> #include<cstdio> #include<algorithm…
目录 day5 5H div2 Nested Tree (树形dp) 5F div2 Kropki (状压dp) 5J div1 Special Judge (计算几何) 5I div1 Sorting (线段树) 5D div1 Doppelblock (搜索) 5C div1 Division (主席树) 5E div1 Fast Kronecker Transform (NTTorFFT) day7 7G div1&2 抢红包机器人 (拓扑序) 7A div1 迷宫 (树 规律) 7E d…
题目链接 \(Description\) 给定\(n\)个十维向量\(\overrightarrow{V_i}=x_1,x_2,...,x_{10}\).定义\(\overrightarrow{V}=x_1,x_2,...,x_{10}\)的模长\(|\overrightarrow{V}|=\sqrt{x_1^2+x_2^2+...+x_{10}^2}\).求有多少个四元组\(1\leq i,j,k,l\leq n\)满足\(|\overrightarrow{V_i}-\overrightarr…
题目链接 \(998244353\)写成\(99824435\)然后调这个线段树模板1.5h= = 以后要注意常量啊啊啊 \(Description\) 每个位置有一个\(3\times3\)的矩阵,要求支持区间赋值和求区间乘积. 输出答案对\(998244353\)取模后的结果. \(n,q\leq10^5\). \(Solution\) 裸的线段树+矩阵快速幂是\(O(3^3q\log^2n)\)的,因为维护区间乘的话,区间赋值为矩阵\(A\)的时候要赋值\(A^{r-l+1}\),带一个快…
题目链接:https://zhixincode.com/contest/3/problem/J?problem_id=43 样例输入 1 4 1110 11 110 21 210 31 315 415 415 415 415 4 样例输出 1 28 题解: 首先是有个简单的想法,假设wls买完后,$n$ 个居民他们的各自的宝物数目最大不超过 $k$,因此wls手里的宝物数目至少要大于 $k$. 所以暴力枚举 $k$,然后再暴力地对所有宝物数目超过 $k$ 的居民,将他们买到不超过 $k$:然后如…
题目链接:https://zhixincode.com/contest/3/problem/F?problem_id=39 样例输入 1  4 5 1 1 2 3 4 1 2 1 1 3 1 1 4 100 2 4 1 3 4 1 样例输出 1 6 题解: 这个体力感觉跟势能是个差不多的东西……很显然,如果没有降低山峰的能力,wls最多只能爬高度为 $h[1]+k$ 的山,更高的就爬不了. 因此,这个就是同时有点权和边权的最短路,只要在松弛有向边的时候判断一下该边的终点是否需要另外花费即可. 或…
题目链接:https://zhixincode.com/contest/18/problem/I?problem_id=267 题目描述 输入描述 输出描述 一行一个整数表示答案. 样例输入 1 320 115 1020 2 样例输出 1 60 题解: 首先肯定的是,这 $n$ 次选择必然是分为两段的,前一段全部是召唤,后一段全部是加攻. 然后我们只需要考虑,这两段的数目即可,然后我们假设这个函数和最后的总攻击力是一个单峰函数,就可以上三分. 那么接下来考虑在确定多少张牌召唤,多少张牌加攻的前提…