https://www.luogu.org/problemnew/show/AT3575 题解 根本不会.. 错误记录:缺少32行的转移.显然这个转移是必要的 #include<cstdio> #include<algorithm> #include<cstring> #include<vector> using namespace std; #define fi first #define se second #define mp make_pair #d…
题目链接 题意 对于一个\(01\)串,如果其中存在子串\(101\),则可以将它变成\(010\). 问最多能进行多少次这样的操作. 思路 官方题解 转化 倒过来考虑. 考虑,最终得到的串中的\('1'\)的来源 1-1 | -101--101 | --1011----1011 | | | ----10111---------- --1101----1101 | ----11101---------- 所以,最终的\('1'\)对应着最初的串中的 \(1\) \(111...11101\) \…
题目:https://atcoder.jp/contests/code-festival-2017-qualb/tasks/code_festival_2017_qualb_d 题意:给一个 01 串,每次可以把 101 换成 010,问最多能换多少次 . 题解: 令 \(dp_i\) 表示 \(1\sim i\) 最多换多少次,记录一个 \(l_i\) 表示 \(i\) 左边最接近的 \(0\),\(r_i\) 表示 \(i\) 右边最接近的 \(0\),从而: \[dp_i=\max\beg…
蒟蒻__stdcall终于更新博客辣~ 一下午+一晚上=一道计数题QAQ 为什么计数题都这么玄学啊QAQ Prelude 题目链接:这里是传送门= ̄ω ̄= 下面我将分几个步骤讲一下这个题的做法,大家不必一次看完,可以一点一点地推进思路,希望对锻炼大家的思维能力有帮助o( ̄▽ ̄)ブ. Step 1 首先要看出来这是一个计数题对吧... 计数题有很多做法,对于这个题,我们考虑合理枚举,即不重复不遗漏地枚举所有情况,然后乘上一个组合数,并通过前缀和优化来降低复杂度. Step 2 枚举什么东西呢? 我…
题目链接:http://code-festival-2017-qualb.contest.atcoder.jp/tasks/code_festival_2017_qualb_c 题意:给出一个含 n 个顶点 m 条边的图,对于图中两点 u, v 之间可以添加一条边当且仅当 u, v 是通过三条边连接在一起时,求最多可以添加多少条边. 思路:猜结论,当给出的图是二分图时,sol = st1.size() * st2.size() - m,其中 st1.size(), st2.size() 二分图两…
题目链接 题意 给定一个字符串(长度\(\leq 2e5\)),将其划分成尽量少的段,使得每段内重新排列后可以成为一个回文串. 题解 分析 每段内重新排列后是一个回文串\(\rightarrow\)该段内至多只有一个字符出现过奇数次 考虑哈希到一个\(26\)位的\(01\)串,出现过奇数次的元素位置上的值为\(1\),否则为\(0\). 于是可以继续往下推:\(\rightarrow\)该段的哈希值为\(0\)或者是\(2\)的幂次. 转化 于是问题转化为:将字符串切割成尽量少的若干段,使得每…
题目链接 题意 给定字符串\(s\),可以在其中任意位置插入字符\(x\). 问能否得到一个回文串,若能,需插入多少个\(x\). 思路 首先统计出现次数为奇数的字符\(cnt\). \(cnt\geq1\) 显然无解 \(cnt==1\) 则回文串长度为奇数.找到中间位置,向两边check. \(cnt==0\) 则回文串长度为偶数.找到中间的两个位置,向两边check. // 很生气...打比赛时活生生将\(n\)跟在了\(cnt\)后面定义,于是用一个\(char\)类型的\(n\)去wa…
题目链接 题意 \(A+B\)个球排成一行,左边\(A\)个为红球,右边\(B\)个为蓝球. 最开始可以选择两个数\(s,t\),每次操作可以取左起第\(1\)或\(s\)或\(t\)个球.问有多少种不同的取球序列. Sample Sample Input 1 3 3 Sample Output 1 20 Explanation There are 20 ways to give 3 red balls and 3 blue balls. It turns out that all of the…
题目链接 题意 给定一个无向图,\(n\)个点,\(m\)条边(\(n,m\leq 1e5\)). 重复如下操作: 选择相异的两点u,v满足从点u出发走三条边恰好能到达点v.在这样的u,v点对之间添一条边(如果已经存在则无需再次添加). 问最多能添加多少条边. 我的思路 (是写给自己看的读者老爷可以跳过去的部分) 首先, 所有距离为奇数的点对之间都能添边.因为 3-1+3=5 5-1+3=7 5-1+5=9 7-1+3=9 7-1+5=11 7-1+7=13 9-1+3=11 9-1+5=13…
题目大意:给一个\(n\times m\)的棋盘染四种颜色,要求曼哈顿距离为\\(d\\)的两个点颜色不同.解题思路:把棋盘旋转45°,则\((x,y)<-(x+y,x-y)\).这样就变成了以(x,y)为中心,边心距为d的正方形的轮廓不能和(x,y)同色.考虑x所在的行,我们可以采用先d个为一段,换一种颜色再d个为一段,再换回原来的颜色d个一段的方式染.这样可以推广到2维,考虑以一个d*d的正方形为一个单位,然后每4个的颜色两两不同,可以发现满足条件(抄自lych_cys).Ruby是什么语言…
题目大意:给你\(A\)个a,\(B\)个b,\(C\)个c,要你构造一个字符串,使它的最小循环表示法最大.求这个表示法.解题思路:不知道怎么证,但把a.b.c当做单独的字符串扔进容器,每次把字典序最小的和字典序最大的两个字符串合并就是答案.容器用multiset即可. C++ Code: #include<cstdio> #include<set> #include<string> using namespace std; multiset<string>…
[题意概述] 给出一个只有小写字母的序列,问最少把序列分成几段可以满足每一段可以通过变换成为回文串.变换指的是交换子序列中的字母的位置. [题解] 我们把a~z分别设为2^0~2^25,每个子序列满足条件当且仅当子序列异或和为0或2的n次幂. 我们用sum[i]表示前缀异或和,用f[i]表示1~i的序列最少分成几段能满足条件,用g[i]表示状态为i的序列的最小的f #include<cstdio> #include<algorithm> #include<cstring>…
[Atcoder Code Festival 2017 QualB/At3575] 101 to 010 有一个01序列,每次可以选出一个101,使其变成010,问最优策略下能操作几次? 考虑像 1111101 或者 1011111 这样的东西,它们最多能被操作的次数为长度-2 设\(l[i]\) 表示 \(i\) 左边第一个 \(0\) 的位置 设 \(f[i]\) 表示前缀的最大操作数 对于每个 \(a[i]=1\) 的位置,我们考虑进行转移 对于 \([i-2,i]\) 为 101 的情况…
CODE FESTIVAL 2017 qual B B - Problem Set 确实水题,但当时没想到map,用sort后逐个比较解决的,感觉麻烦些,虽然效率高很多.map确实好写点. 用map: #include<iostream> #include<cstdio> #include<cstdlib> #include<map> using namespace std; map<int,int>mp; int main() { int n,…
CODE FESTIVAL 2017 qual B C - 3 Steps 题意:给定一个n个结点m条边的无向图,若两点间走三步可以到,那么两点间可以直接连一条边,已经有边的不能连,问一共最多能连多少条边. 题解:其实我不知道二分图的实际算法,网上有人说这可以看成是否是二分图来做.    有人给出了个性质(没发现>_<):相邻奇数长度的两个点一定能连边 二分图就是一个图的结点分别在两个不相交的集合S,T中,且每条边都在两个集合中.(不严谨说法)如果是二分图,那么能连的边数就是|S|*|T|-m…
最近不知道为啥被安利了饥荒,但是不能再玩物丧志了,不能颓了 饥荒真好玩 A - XXFESTIVAL CCFESTIVAL #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space putchar(' ') #define enter putchar('\n'…
失踪人口回归.撒花\^o^/ 说来真是惭愧,NOI之后就没怎么刷过题,就写了几道集训队作业题,打了几场比赛还烂的不行,atcoder至今是蓝名=.= 以后还是多更一些博客吧,我可不想清华集训的时候就退役 A - XXFESTIVAL 题意:输入XXFESTIVAL,输出XX... #include<bits/stdc++.h> using namespace std; char s[1005]; int main() { scanf("%s",s); int n=strle…
除非人品好,能碰巧想到思路,否则基本是做不出来dp的,除了那几个经典的dp模型.. 看了几个前几名的代码,还是t神的代码比较清晰.膜tourist 代码的思路和题解思路基本一致..... #include <bits/stdc++.h> using namespace std; const int MAXN = 1234567; char s[MAXN]; int f[MAXN]; int nxt[MAXN],prv[MAXN]; int main() { int n; scanf("…
[题意]给定h,w,d,要求构造矩阵h*w满足任意两个曼哈顿距离为d的点都不同色,染四色. [算法]结论+矩阵变换 [题解] 曼哈顿距离是一个立着的正方形,不方便处理.d=|xi-xj|+|yi-yj| 将矩阵旋转45°,转为切比雪夫距离(正方形).d=max{|xi-xj|,|yi-yj|} (图片来自Atcoder editorial) 定义旋转后的每个点坐标为(x-y,x+y).(实际处理中x-y+10000避免负数) 将新坐标按d划分区域,就可以发现每个点必须和八连通的块异色,如下图.…
A - Snuke's favorite YAKINIKU -- #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space putchar(' ') #define enter putchar('\n') #define MAXN 40005 #define…
A - Can you get AC? No #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define pb push_back #define mp make_pair using namespace std; typedef long long int64; char s[15]; int main() { scanf("%s",…
[题意]给定只含小写字母的字符串,要求分割成若干段使段内字母重组顺序后能得到回文串,求最少分割段数.n<=2*10^5 [算法]DP [题解]关键在于快速判断一个字符子串是否合法,容易发现合法仅当不存在或只存在一个奇数字符,其余字符均为偶数. 当涉及到奇偶性(%2)时,很自然能想到异或. 将小写字母a~z转化2^0~2^25,那么一个字符子串合法当且仅当其连续异或值是0或2^i(0<=i<=25). 令f[i]表示前i个合法的最少段数,sum[i]表示异或前缀和,则有: f[i]=min…
昨晚因为有点事就去忙了,没打后悔啊 A - XXFESTIVAL Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Rng is going to a festival. The name of the festival is given to you as a string S, which ends with FESTIVAL, from input. Answer the questi…
题目大意:共$2n$个价格$p_i$.两人轮流取.你每次取最大的,对方每次随机取.问你取的期望和是多少. 题解:从小到大排序,$\sum\limits_{i=0}^{2n-1} \frac{i*p_i}{2n-1}$ 卡点:无 C++ Code: #include<cstdio> #include<algorithm> using namespace std; long long n,s[200005]; long long ans; int main(){ scanf("…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 N 个点,第 i 点有一个点权 Xi,再给定一棵边带权的树,第 i 条 (Ai, Bi) 边权为 Ci. 构建一个完全图,完全图中边 (i, j) 的边权为 dist(i, j) + Xi + Xj,其中 dist(i, j) 是点 i 与点 j 在树上的距离. 求该完全图的最小生成树. Constraints 2≤N≤200000; 1≤Xi≤10^9;…
目录 @description@ @solution@ @accpeted code@ @details@ @description@ 求有多少 n 点 n 边的无向连通图,满足第 i 个点的度数为 \(d_i\). 原题传送门. @solution@ 如果是树显然就 prufer 定理:基环树就考虑拓展一下. 枚举环上的点集合 S,则环内部能够连出的方案数为 \(\frac{(|S| - 1)!}{2}\)(注意环的大小 \(|S| \geq 3\)). 接着,将环缩成一个新点 x',则它的度…
洛谷题面传送门 & Atcoder 题面传送门 DP 好题. 首先考虑如果我们知道 C 吃了哪些寿司,能够还原出多少种符合条件的序列.我们考虑倒着钦定,即,先钦定 A,B,C 三者最后吃的那三个寿司在 \(c\) 中的顺序,显然 C 最后吃的哪个必须在 A,B,C 最后吃的那三个中最先出现,而 A,B 最后吃的那两个寿司的顺序无所谓,有 CAB 和 CBA 两种选择,答案乘以 \(2\). 再往前一步,我们钦定 A,B,C 倒数第二个吃的那三个寿司在 \(c\)​ 中的顺序,显然 C 倒数第二个…
题意: 对于一个长度为n的排列P,如果P在所有长度为n的排列中,按照字典序排列后,在第s位,则P的value为s 现在给出一个长度为n的排列P,P有一些位置确定了,另外一些位置为0,表示不确定. 现在问,P的所有可能的排列的value之和 n <= 500000 思路: 对于一个可能的排列,它的value为所有小于它的排列的个数 + 1反过来,对于一个排列a,如果P的可能的排列中有sum个排列大于a,则a对答案的贡献为sum 那我们就可以枚举位数, 一位一位的考虑: 对于2个排列P,b,我们假设…
补一发A的题解. A - Snuke's favorite YAKINIKU 题意: 输入字符串S,如果以YAKI开头输出Yes,否则输出No. #include<bits/stdc++.h> using namespace std; int main() { char s[20];cin>>s; int n=strlen(s); if(n<4)puts("No"); else { if(s[0]=='Y'&&s[1]=='A'&&…
题意 给出一个小写字母组成的字符矩阵,问能否通过重排其中的字符使得每行每列都是回文串. 分析 简化版:给出一个字符串,问能否通过重排其中的字符使得它是回文串.那么如果字符串长度为偶数,就需要a到z的个数都是2的倍数,如果长度是奇数,就需要恰好有一种字母的个数不是2的倍数. 那么拓展到二维的情况也差不多. 假设行数为n,列数为m. 1.n和m均为偶数: 最简单的情况,只需要所有字母的个数都是4的倍数 2.n为偶数,m为奇数:(n为奇数m为偶数的情况相同) 那么在刨掉一个长度为n的回文串之后所有字母…