其他比赛题目
...
tomjobs
别慌,慌也没用
展开
-
2021年度训练联盟热身训练赛第一场 I. Full Depth Morning Show(换根DP)
题意:一棵树,每个点有权值aia_iai,每条边有边权wiw_iwi。两点的距离花费为(ai+aj)∗wk(a_i+a_j)*w_k(ai+aj)∗wk,wkw_kwk代表两点距离。求任意两点间距离花费的和。思路:常规的换根DP。定义f[i]f[i]f[i]代表以iii为根时,子树点距离根节点距离与其本身权值的乘积和;定义d[i]d[i]d[i]代表以iii为根时,根到其他点距离和;定义sum[i]sum[i]sum[i]代表以iii为根时,子树点权和。那么点iii的答案就是f[原创 2021-03-11 10:21:40 · 263 阅读 · 0 评论 -
2021年度训练联盟热身训练赛第一场 H. On Average They‘re Purple(最短路,染色)
题意:无向图,你可以给边染色,如果走过的相邻两条边颜色不同,那么权值加一。求一种染色方案,起点终点所有路径中染色得到权值的最小值最大,输出权值。思路:按照起点到其他点的最短距离分组,最短距离为1的组,权值一定为0,最短距离为2的组,一定有一种染色方法使得到这些点权值至少为1,最短距离为3的组,只有在距离2的基础上改变颜色就可以使得其权值至少为2。所以只要求出起点到终点最短距离即可。#include <cstdio>#include <cstring>#include .原创 2021-03-11 10:16:35 · 266 阅读 · 0 评论 -
2021年度训练联盟热身训练赛第一场 E. Early Orders(单调栈)
题意:求一个字典序最小的子序列,包含1~k所有数恰好一次。思路:类似单调栈,用一个栈记录以及选的数字。只要当前的数a[i]a[i]a[i]没在栈中,且比栈底的数小,并且栈底之后还出现,就出栈。bitsetbitsetbitset写法,参考了别人代码#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <set>#incl.原创 2021-03-11 10:09:41 · 174 阅读 · 0 评论 -
2021年度训练联盟热身训练赛第一场 G. Birthday Paradox(生日问题,组合推公式,概率)
题意:mmm个人过生日,然后出现了nnn个不同的生日组,第一组有a1a_1a1个人,第二组有a2a_2a2个人…第nnn组有ana_nan个人。求这种情况出现的概率。思路:就是推公式概率题。总的方案数为365m365^m365m。先找出这nnn种生日,方案数为C(365,n)C(365,n)C(365,n)。然后对着mmm个人分组,也就是C(m,a1)∗C(m−a1,a2)∗...∗C(m−a1−a2...−an−1,an)C(m,a_1)*C(m-a_1,a_2)*...*C(m-a_.原创 2021-03-11 09:52:17 · 286 阅读 · 0 评论 -
2021年度训练联盟热身训练赛第一场 C. New Maths(爆搜)
题意:给你一个结果xxx,求一个最小整数yyy通过与自己进行不进位乘法得到结果xxx。思路:假设xxx长度为nnn,则可以得到yyy的长度为(n+1)/2(n+1)/2(n+1)/2(要求n+1n+1n+1是偶数)。假设已经确定了最低的kkk位,那么最终结果的最低kkk位也确定了。直到确定了全部位,就可以确定最终结果的所有位。直接爆搜经过这样的剪枝可以剪掉很多,复杂度不会太高。#include<cstdio>#include<cstring>#include<.原创 2021-03-10 23:51:11 · 176 阅读 · 0 评论 -
2021年度训练联盟热身训练赛第一场 A. Weird Flecks, But OK(最小圆覆盖,模拟退火)
题意:空间有nnn个点,求3种维度中的平面能画出一个圆覆盖所有点的最小直径。思路:实际就是在三个维度作最小圆覆盖。模拟退火可以解决最小球覆盖,三维改成二维就是最小圆覆盖了。不过最小圆覆盖是有Welzl算法的,待补。。。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;c原创 2021-03-10 23:47:29 · 212 阅读 · 0 评论 -
2018ICPC南京 Problem I. Magic Potion(最大流)
题意:nnn个人,每个人有一个列表,可以杀掉列表里面的一只怪兽,每只怪兽只能死一次。有kkk瓶药水,可以让一个人多杀一只怪兽。求最多可以杀多少只怪兽。思路:最大流裸题,只是再熟悉一下板子。#include <cstdio>#include <cstring>#include <algorithm>#include <map>#include <cmath>#include <unordered_map>#inc.原创 2021-01-18 14:44:20 · 225 阅读 · 0 评论 -
2018ICPC 南京 Problem D. Country Meow(模拟退火)
思路:裸的最小球覆盖,直接模拟退火写。#include <bits/stdc++.h>using namespace std;const int maxn = 1050;const int inf = 0x3f3f3f3f;const double delta = 0.98;const double eps = 1e-7;struct Point { double x,y,z;}a[maxn];int n;double dist(Point a,Point b){.原创 2021-01-17 23:26:54 · 217 阅读 · 0 评论 -
2018南京ICPC Problem K. Kangaroo Puzzle(乱搞)
题意:一些位置有人,一些位置是墙。你可以将所有人往一个方向移动,除非是边界或者是墙才不能移动。至多50000步将所有人移动到一个地方。思路:直接随机取方向,区域赛也搞逗你玩的题目么。。。#include <cstdio>#include <cstring>#include <algorithm>#include <map>#include <cmath>#include <unordered_map>#include原创 2021-01-17 22:53:31 · 471 阅读 · 0 评论 -
2018ICPC南京 Problem M. Mediocre String Problem(回文串,马拉车,扩展KMP)
题意:给你两个字符串s,ts,ts,t,要求从sss中找到一个子串和ttt的一个前缀拼起来,结果要是回文串。求多少种拼法。思路:借此题复习了一下字符串算法。首先sss中找到的子串可以分为两部分:s1+s2s1+s2s1+s2,s1s1s1一定是ttt一个前缀的逆反串,s2s2s2一定是个回文串。所以可以将一开始所给的sss串反一下,然后算出每个右端点iii对应回文串的个数,再找到[i+1,len][i+1,len][i+1,len]部分与ttt串的最长公共前缀,二者相乘就是答案。算回文串的过程.原创 2021-01-17 22:39:48 · 241 阅读 · 0 评论 -
2020ICPC济南 Bit Sequence(数位DP)
思路:赛中最后3min过的,过的时候都直接叫出来了(虽然还是银,对结果并没有影响定义dp[len][one][sta][sum]dp[len][one][sta][sum]dp[len][one][sta][sum],代表遍历到了第iii位,第[8,len][8,len][8,len]位oneoneone的个数为奇数/偶数,第[0,7][0,7][0,7]位选择的值,以及第8位开始连续1的个数的奇偶值sumsumsum。复杂度O(T∗60∗2∗2∗27)O(T*60*2*2*2^7)O(T∗60∗..原创 2021-01-11 23:57:13 · 811 阅读 · 0 评论 -
2020ICPC 济南 A. Matrix Equation(异或高斯消元)
思路:反正感觉挺有意思的一道题目,赛中想到高斯消元觉得没有板子写不了。然后队友说kuangbin板子有,我就敲上去,就过了。。。具体过程懒得说了,反正你把方程列出来变形一下,发现ccc矩阵的每一列是独立的,所以按照列来算。对于每一列可以得到一个nnn个变量的异或矩阵,结果就是2高斯消元后自由元个数2^{高斯消元后自由元个数}2高斯消元后自由元个数,每一列结果乘起来就好了。#include <cstdio>#include <cstring>#include <al.原创 2021-01-11 23:09:30 · 305 阅读 · 0 评论 -
2020济南ICPC J.Tree Constructer(二分图,构造)
思路:能想到二分图就感觉挺简单的了。将树染色成二分图,然后取数目较小的那一部分(保证数目不大于50)。对于第一种颜色:将第iii个节点染色成(1<<60)−1−(1<<59)−(1<<i)(1<<60)-1-(1<<59)-(1<<i)(1<<60)−1−(1<<59)−(1<<i),这样保证同色或运算结果不会是(1<<60)−1(1<<60)-1(1<<6.原创 2021-01-11 23:03:27 · 354 阅读 · 0 评论 -
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)(热身赛)
希望明天正赛也有好运气吧,为队友和自己拿个好点的成绩,再见2020。。。思路:将数的长度分为奇数和偶数的情况进行讨论,如果长度为奇数,那结果就是10len/2−110^{len/2}-110len/2−1;如果长度为偶数,那么如果数的前一半大于后一半,则结果就是前一半数的大小。否则结果是前一半数的大小减一。#include <cstdio>#include <cstring>#include <algorithm>using namespace std.原创 2020-12-26 21:43:19 · 1450 阅读 · 1 评论 -
2020ICPC上海 C.Sum of Log(数位DP)
思路:思路很快就出来了,但是实现过程还是有点细节,一直在T。。。可以观察发现,题中式子的结果就是i∣ji|ji∣j的最高位。那么我们按照X,Y的二进制位跑数位DP就好了。我初始的状态定义是dp[len][high]dp[len][high]dp[len][high],代表两个数枚举到了第lenlenlen位,最高位为highhighhigh时候的结果。但是这样定义状态有个问题,由于limitlimitlimit的存在,就是很多状态无法记录不下来,比如X=1000000000,Y=1的时候,前面部分几.原创 2020-12-26 14:41:16 · 529 阅读 · 1 评论 -
2020 CCPC Wannafly Winter Camp DAY6 K重排列(置换,DP)
思路:K一定是排列中所有环长度的公倍数,所以枚举K中小于等于nnn的因数,然后进行转移。定义dp[i]dp[i]dp[i]为选择了长度为iii排列的方案数,则有dp[i]=∑dp[i−j]∗C(i−1,j−1)∗fac[now−1],j∣kdp[i]=∑dp[i-j]*C(i-1,j-1)*fac[now-1],j|kdp[i]=∑dp[i−j]∗C(i−1,j−1)∗fac[now−1],j∣k。#include <cstdio>#include <cstring>#i.原创 2020-12-26 00:01:10 · 186 阅读 · 0 评论 -
2020ICPC 南京 Fireworks(整数三分+期望)
题意:拿一个鞭炮花nnn时间,点燃之前所有鞭炮花mmm时间。一个鞭炮有p10000\frac{p}{10000}10000p的可能是个好鞭炮。求最少期望时间能点燃好鞭炮。思路:可以想到,肯定是每次放固定数目的鞭炮再点燃,因为只要存在一个固定数目为xxx期望时间少,之后肯定还是放xxx个。那么设放xxx个鞭炮再点燃,能遇到好鞭炮的期望次数为(mid∗n+m)/(1−(1−p)mid))(mid * n + m) / (1 - (1 - p)^{mid}))(mid∗n+m)/(1−(1−p)mid原创 2020-12-25 17:26:18 · 486 阅读 · 0 评论 -
2020ICPC 南京 Monster Hunter(树形依赖背包)
好久没写树形DP手生疏了。题意:每个点权值为hp[x]+hp[v]hp[x]+hp[v]hp[x]+hp[v],其中vvv是xxx的儿子。你可以删掉mmm个点,求对于0≤m≤n0≤m≤n0≤m≤n的每个mmm能得到的最小权值和。思路:定义dp[i][j][0/1]dp[i][j][0/1]dp[i][j][0/1]代表点iii为根子树,删掉了jjj个点,iii是否被删能得到的最小权值和。转移就是按照基本的背包转移,不再赘述。但是注意一点,转移过程中其实隐含了dp[i][j][0/1]dp[i][原创 2020-12-25 17:17:28 · 704 阅读 · 1 评论 -
2020ICPC 南京 Evil Coordinate(模拟,构造)
最后是队友过的,我写的相对复杂题意:给一个移动的序列(L,R,U,D代表左右上下),重排其使得移动的过程不会经过(X,Y)(X,Y)(X,Y)。设终点为(ex,ey)(ex,ey)(ex,ey)思路:首先特判掉特殊点为终点或者为原点的情况,分为两种情况:特殊点不在坐标轴上,此时如果ex=Xex=Xex=X,那么先用L,RL,RL,R使其只剩下一个,然后用光U,D,再使用剩下的L,R。如果ex!=Xex!=Xex!=X,那么先用L,RL,RL,R,再用U,DU,DU,D。特殊点在坐标轴上.原创 2020-12-25 17:00:50 · 391 阅读 · 0 评论 -
2020ICPC 南京 K Co-prime Permutation(构造)
题意:构造一个排列,使得gcd(i,pi)=1gcd(i,p_i)=1gcd(i,pi)=1的pip_ipi数目严格为kkk。思路:因为111的存在,所以kkk一定不会是0。因为gcd(x,x+1)=1gcd(x,x+1)=1gcd(x,x+1)=1,所以只需要交换相邻两个数就可以使得结果加2。当kkk为奇数的时候使得p1=1p_1=1p1=1,然后后面的数相邻两个进行交换就好了。当kkk为偶数的时候从1开始相邻两个数进行交换。#include <cstdio>#incl.原创 2020-12-25 16:43:45 · 520 阅读 · 0 评论 -
2020ICPC上海 Fibonacci(水过)
康复训练,水水代码证明我还活着。思路:可以发现斐波那契数列数列是奇奇偶、奇奇偶这样排列的。所以3个数分为一组,假设为kkk组。偶数和后面的数组合的ggg值都为1。第一个偶数有n−3n-3n−3个组合第二个有n−3∗2n-3*2n−3∗2个组合第三个有n−3∗3n-3*3n−3∗3个组合。。。直到最后一个有n−3∗kn-3*kn−3∗k个组合等差数列求和算出偶数贡献为2∗n−3−3∗k2\frac{2*n-3-3*k}{2}22∗n−3−3∗k奇数只能和后面偶数求和,前两个奇数有2.原创 2020-12-25 16:12:44 · 170 阅读 · 0 评论 -
I 变大!(DP) 2020 CCPC Wannafly Winter Camp Day6 Div.1&2
思路:很有意思的一道思维DP。定义dp[i][k]dp[i][k]dp[i][k]代表对于[1,i][1,i][1,i]中的数,进行至多kkk次操作能得到的最大和。对于一个区间[l,r][l,r][l,r],可以知道,最优的操作就是把这个区间所有数变成其中的最大数,这需要(r−l+1)2\frac{(r-l+1)}{2}2(r−l+1)次操作。那么我们就按照这(r−l+1)2\frac{(r-l+1)}{2}2(r−l+1)个操作次数进行转移。从f[l−1][k]+(r−l+1)∗max(a[.原创 2020-12-18 10:49:03 · 145 阅读 · 0 评论 -
2020ICPC上海 M Gitignore(DFS)
题意:给你一些路径,有些路径要删,有些路径不能删。求最少删掉多少个文件。思路:建一棵树,f[i]f[i]f[i]代表以iii为根节点子树最少删掉多少个文件,flag[i]flag[i]flag[i]代表以iii为根节点子树是否存在不能删的路径。那么对于xxx的子节点vvv,如果flag[v]=1flag[v]=1flag[v]=1,f[x]+=f[v]f[x]+=f[v]f[x]+=f[v],否则f[x]+=1f[x]+=1f[x]+=1。结果就是f[root]f[root]f[root]#i原创 2020-12-17 00:34:43 · 592 阅读 · 0 评论 -
2020ICPC上海 B.Mine Sweeper II(思维,乱搞)
题意:扫雷,给你A,B图。权值为所有非雷点的和,要求你修改B图中不超过(n*m/2)个点,使得A,B图权值相等。思路:感觉过的太多了,肯定不难。模拟发现,每个点变化值1,2,3,4…都有,所以大胆猜测一定有解,所以直接用优先队列存下修改每个点造成的权值变化,然后每次取出最大(最小)的,来逼急差值,使得A,B尽可能相等。再更新周围8个点。写的很恶心了。。。#include <bits/stdc++.h>using namespace std;typedef long long ll;原创 2020-12-17 00:28:14 · 363 阅读 · 0 评论 -
2020ICPC上海 I Sky Garden(乱搞,思维)
题意:就是n个同心圆n条线,第i个圆半径为i,线平分圆。求所有交点间最短距离的和。思路:看数据范围很小,所以写了个mn2mn^2mn2的算法,据说可以优化到O(n)O(n)O(n)。很明显,一个点到另外一个点的最短距离,要么就是走半径到圆心,再走半径到另外一个点;要么就是小圆上的那个点先走圆周,再走半径到大圆上的点。已经知道了最短距离怎么算了,那么就直接枚举每一层上的点到其他层上所有点距离和就ok了。比较恶心的是,我以为原点是一定要有的,所以一开始特判m=1的情况。#include <原创 2020-12-17 00:20:51 · 963 阅读 · 0 评论 -
2020上海ICPC H Rice Arrangement(乱搞,思维)
题意:一个长度为n的环,有些位置有人,有些位置有菜。你可以旋转菜盘,使得所有菜位置+1或者-1,一个人可以吃一盘菜。求最短旋转次数使得所有人吃到菜。思路:可以想到,将菜和人排序,那么确定了第一个人吃的哪个菜以后,后面的人都是顺序吃菜了。假设后面的人不顺序吃菜,那么人和菜的连线就出现交叉,找菜的时候就可能出现第一个人遇到了第二个人的菜,第二个人遇到了第一个人的菜,但是还得继续旋转那么可以想到将交叉线交换,结果更优。所以不可能出现交叉。自己写的时候想的是二分+for循环判断,觉得环只可能顺时针转或者只可原创 2020-12-17 00:14:40 · 1012 阅读 · 1 评论 -
2020ICPC上海 D Walker(二分)
题意:一条长度为n的直线上有两个人,位置为p1,p2,速度分别为v1,v2。求两人走过整条直线的最少时间。思路:二分所花时间,得到两人所能走的距离len1,len2len1,len2len1,len2。那么分情况讨论:一个人可以覆盖整条直线右左,左右,左左,右右,如果走完这个方向还有剩余,那就往回走。#include <algorithm>#include <cstring>#include <algorithm>#include <ios原创 2020-12-16 23:45:53 · 716 阅读 · 0 评论 -
牛客编程巅峰赛S2第4场 青铜(水过)
内心是拒绝的,被pc拉着乱打了一下,还出了一堆bug…思路:字符串模拟,注意四舍五入。class Solution {public: /** * 返回一个严格四舍五入保留两位小数的字符串 * @param n int整型 n * @return string字符串 */ string Probability(int n) { // write code here if(n >= 50) {原创 2020-11-27 21:28:44 · 228 阅读 · 0 评论 -
AtCoder Regular Contest 107 A - Simple Math
思路:对a,b,ca,b,ca,b,c分别算,得出结果就是(a+1)∗a/2∗b∗(b+1)/2∗c∗(c+1)/2(a+1)*a/2*b*(b+1)/2*c*(c+1)/2(a+1)∗a/2∗b∗(b+1)/2∗c∗(c+1)/2。#include <cstdio>#include <cstring>#include <vector>#include <algorithm>#include <queue>using namespa.原创 2020-11-14 21:43:53 · 76 阅读 · 0 评论 -
AtCoder Regular Contest 107 B - Quadruple
思路:可以设x=a+b,y=c+dx=a+b,y=c+dx=a+b,y=c+d,那么问题就转换为了x=k+yx=k+yx=k+y。限制条件就是2≤x,y≤2∗n,1≤a,b,c,d≤n2≤x,y≤2*n,1≤a,b,c,d≤n2≤x,y≤2∗n,1≤a,b,c,d≤n,所以当2≤x≤n+12≤x≤n+12≤x≤n+1的时候,选择a,ba,ba,b的方案数为x−1x-1x−1,否则方案数为2∗n−x+12*n-x+12∗n−x+1。所以只要枚举yyy的大小,那么xxx就确定了,再算出xxx,yyy对应.原创 2020-11-14 21:42:17 · 143 阅读 · 0 评论 -
AtCoder Regular Contest 107 C - Shuffle Permutation(并查集)
思路:如果xxx行能和yyy行,zzz行交换,那么yyy行也可以和zzz行交换。所以把能互相交换的部分(行,列)用并查集合并起来。每个能互相交换的连通块的总方案数就是连通块大小的阶乘。#include <cstdio>#include <cstring>#include <vector>#include <algorithm>#include <queue>using namespace std;typedef long lon.原创 2020-11-14 21:37:54 · 206 阅读 · 0 评论 -
AtCoder Regular Contest 107 D - Number of Multisets(DP)
题意:nnn个2i,i≤02^i,i≤02i,i≤0数构成kkk有多少种方案。思路:定义f[n][k]f[n][k]f[n][k]为选nnn个2i,i≤02^i,i≤02i,i≤0构成kkk的方案数。如果n=kn=kn=k,那么只能全部选1;如果n<kn<kn<k,那怎么选都选不够。那么这一步如果选择1,就转移到了f[n−1][k−1]f[n-1][k-1]f[n−1][k−1];如果这一步选择其他的数,相当于将除了1以外的可选数乘以2,并且将kkk乘以2,所以转移到了f[n].原创 2020-11-14 21:31:51 · 201 阅读 · 0 评论 -
AtCoder Regular Contest 107 E - Mex Mat(规律)
思路:在i≥4,j≥4i≥4,j≥4i≥4,j≥4的时候,满足a[i][j]=a[i−1][j−1]a[i][j]=a[i-1][j-1]a[i][j]=a[i−1][j−1]。。。mexmexmex真是神奇,刚刚试了一下,对于仅有0,1,2,3的时候也满足这个规律。#include <cstdio>#include <cstring>#include <vector>#include <algorithm>#include <queue.原创 2020-11-14 21:24:05 · 278 阅读 · 0 评论 -
AtCoder Regular Contest 107 F - Sum of Abs(最小割)
题意:一个图,删掉一个点的代价是a[i]a[i]a[i],一个连通块的价值为abs(∑b[i])abs(∑b[i])abs(∑b[i])。求通过删点能得到的最大价值。思路:参考博客:https://blog.csdn.net/ezoihqm/article/details/109411807感觉建图很巧妙的一道网络流。将一个点拆成取正值(+1),取反值(-1),删掉。那么建图就是 s−>i−>i+n−>ts->i->i+n->ts−>i−>i+.原创 2020-11-14 21:15:09 · 207 阅读 · 0 评论 -
2020CCPC长春 7-12 L - Coordinate Paper(构造)
题意:给你n,k,sn,k,sn,k,s,要求你构造aaa数组满足上面3个条件。思路:大概的意思就是将数组构造成0,1,2,…,k,0,1,2,…k,0,1,2…这样的形式可以得到最小值。然后我们对这个最小值数组修改使其和达到我们需要的sss。咋修改呢?可以发现,可以先将为0的数变成k+1k+1k+1,然后将为1的数变成k+2k+2k+2。。。还可以将数组每个数加(k+1)(k+1)(k+1)。这样实际就是对总和加上任意个k+1k+1k+1。所以可以枚举起始数,得到这个起始数对应的最小值数组原创 2020-11-13 14:37:49 · 196 阅读 · 0 评论 -
2020CCPC长春 7-4 D - Meaningless Sequence(数位DP)
思路:可以发现,ana_nan的二进制有xxx个1,则值为cxc^xcx,所以我们要求aia_iai二进制中1的个数。定义dp[i][j]dp[i][j]dp[i][j]为考虑i~n位,有j个1的情况有多少种,然后裸的数位DP跑就好了。好像直接固定前缀就可以n^2写了,数位dp并没有必要。。。#include <cstdio>#include <algorithm>#include <cstring>using namespace std;con.原创 2020-11-12 22:43:43 · 354 阅读 · 0 评论 -
2020CCPC长春 7-6 F - Strange Memory(暴力,map)
思路:直接枚举祖先节点,用mapmapmap存下valvalval这个值对应的下标集合对于每个二进制位的和。所以当父节点权值为a[x]a[x]a[x]时,要求valvalval能与多少个点产生贡献,就要在之前的子树和父节点的点击中找到所有权值为a[x]^val的点,并对于每个二进制位算贡献值。因为第一个子树不用遍历,所以我们将子节点按照大小排序,大的子树放在前面。感觉常数好大,是水过去的啊。。。#include <cstdio>#include <algorithm>.原创 2020-11-12 22:40:30 · 318 阅读 · 0 评论 -
2019湖南省赛 C.Distinct Substrings(哈希+二分,扩展KMP)
思路:串的最后加上i以后,实际上加上了n+1n+1n+1个串,我们要减去重复的子串个数。假设串加上iii后,对于长度为midmidmid的后缀发生重复,那么对于长度为1...mid−11...mid-11...mid−1的后缀也会发生重复,所以要判断有midmidmid个重复子串,实际就是判断新串长度为midmidmid的后缀和旧串某个长度为midmidmid的后缀发生重复。这个过程具有单调性,所以可以哈希+二分写。#include <cstdio>#include <cstri.原创 2020-11-11 21:08:44 · 199 阅读 · 0 评论 -
2019湖南省赛G 字典序(建图,拓扑排序)
思路:之前听学长讲的思路是用bitsetbitsetbitset优化暴力写,对于每一行的大小关系依次确定(第iii行大于第i−1i-1i−1行)。也就是对于已经选择的列,确定了前iii行大小关系了,那就继续遍历剩下的列,使得能确定第i+1i+1i+1行关系(或者更多),前提是不会破坏后面的大小关系。用bitsetbitsetbitset优化这个过程以后复杂度是O(n364)O(\frac{n^3}{64})O(64n3),学长现场赛还真乱搞过了XD。n2n^2n2写法与暴力写法类似,也是要按照行依.原创 2020-11-10 11:44:26 · 228 阅读 · 0 评论 -
2020小米网络赛第一场 G Tree Projection(拓扑序,构造)
题意:构造一棵树,使得按照A1A1A1为根拓扑排序可以得到AAA序列,按照B1B1B1为根拓扑排序可以得到BBB序列。思路:表示很巧妙,没想出来,直接搬题解吧这道题倒是纠正了我一直以来的误区,我以前一直用bfs写拓扑,所以转换到树上的时候想当然的把bfs序与拓扑序等价了起来。但其实拓扑排序也可以是树上dfs序,只要满足前驱限制条件的序列都是拓扑序。#include<cstdio>#include<cstring>#include<algorithm>#.原创 2020-11-09 13:37:11 · 221 阅读 · 0 评论