随笔分类 - 高质量难题
摘要:SOS DP/Gym - 102576B 我看懂了!!契机:排位赛B题,愣是不会求,😭Sum over subsets -> SOS比如这样一个问题:给你一个长度为n的数组,然后统计有多少个数对 (a[i]&a[j])==a[i];把a[j]化为2进制 100010101, 那也就是找出满足 a[
阅读全文
摘要:King's Children Gym - 102411Khttps://vjudge.net/problem/Gym-102411K/origin这个题就很贼了,思路是先填'A',填到最大,然后再填充其他的,不同的顺序会影响结果,经过wa42,wa40,wa46,我们AC了 //队友代码 #inc
阅读全文
摘要:Ideal PyramidGym - 102411Ihttps://vjudge.net/problem/Gym-102411I/origin主要突破点在45度,而且这个正方形的边是平行于坐标轴的,让每个柱子全都沿着4个方向摔倒就可以了,然后分别取最大最小值,柱子就在中间 #include <bit
阅读全文
摘要:Palindromes HihoCoder - 1878 https://vjudge.net/problem/HihoCoder-1878/origin 当时主要问题在于,这个数很大,不太会处理。我当时已经看出来它是多少就是多少,1234直接就可以对称过去,队友代码写的是真巧妙~ //I #inc
阅读全文
摘要:CodeForces - 715B 先判断impossible的情况1. 0边全赋值为1,此时最短路>L2. 0边全赋值为inf,此时最短路<L 我们按读入顺序对0边进行排列,然后我们二分找到第一个必经0边,假设它在0边中的下标是第i个,那么1~i的0边为1,i+1~cnt的0边为inf(就是这些边
阅读全文
摘要:The Flee Plan of Groundhogdfs相向而行就距离-3,时间+1背道而驰就距离-1,时间+1注意土拨鼠可以不走,特判就好 #include <bits/stdc++.h> #define inf 2333333333333333 #define N 1000010 #defin
阅读全文
摘要:#include <iostream> #include <cstdio> #include <queue> #include <algorithm> #include <cmath> #include <cstring> #define inf 2147483647 #define N 10000
阅读全文
摘要:#include <iostream> #include <cstdio> #include <queue> #include <algorithm> #include <cmath> #include <cstring> #define inf 2147483647 #define N 10000
阅读全文
摘要:CodeForces - 1208E 经典滑动窗口问题,如果以物体为参考系的话。前缀和优化区间操作 #include <bits/stdc++.h> #define inf 2333333333333333 #define N 1000010 #define p(a) putchar(a) #def
阅读全文
摘要:牛客多校: https://ac.nowcoder.com/acm/contest/5673/I 题意:每次从两个数中选一个,也可以不选,但是选不能选之前重复的。做法:同一行连一个边,然后一个图中有环的贡献就是这个图的大小;没环就是大小-1,用并查集维护就可以 #include <bits/stdc
阅读全文
摘要:f[i][j]表示向上扩展了i行,向右扩展了j列的方案数显然f[i][j]=f[i-1][j]*j+f[i][j-1]*i;但是这样会有重复的怎么去重是关键,top行和right列对称操作会重复算,所以最后为f[i][j]=f[i-1][j]*j+f[i][j-1]*i-(i-1)*(j-1)*f[
阅读全文
摘要:hdu 6096前缀l,后缀r,中间部分mid一个字符串为k=l+mid+r,其中l和r没有相交的部分题目给了一些字符串和一些前后缀,问每个前后缀能匹配多少字符串我们构造字符串s=r+'^'+l,t=k+'^'+k用s去建立ac自动机,对每个字符串k进行查询。怎么保证不会重叠呢?如果不重叠的话,后缀
阅读全文
摘要:https://vjudge.net/contest/376754#problem/C 一个不错的区间dp,可惜我当时看错题了,忘记了得是二叉搜索树,按普通树来做的,就60分。 f[i][j]表示区间[i,j]合法 l[i][k]表示[i,k-1]能构成k的左子树 r[k][j]表示[k+1,j]能
阅读全文
摘要:https://codeforces.com/problemset/problem/525/E每个仙女有三种情况,枚举一下,n对半分,使得复杂度变成o(k*3^(n/2))用map统计的时候,每次如果跑for的话会有很多重复的,这样可以直接存下来前缀和 for(auto i:mp){ for(int
阅读全文
摘要:所有不合法的只有这些可能: ABBBBBB BAAAAAA AAAAAAB BBBBBBA 所以把这些去了就可以了。 #include <bits/stdc++.h> #define inf 2333333333333333 #define N 1000010 #define p(a) putcha
阅读全文
摘要:这是一个非常nice的题:1.map去重边,n的话有1e5, 1 const long long base[]={20200422,1000000007,9997,7}; 2 mp[E[i].l*base[1]+E[i].r*base[2]+E[i].v*base[3]]++; 这样来判断这条边的个
阅读全文
摘要:https://vjudge.net/contest/367072#problem/C套娃题qwq 第k个位置它肯定会在一个区间里,[1234567891011][123456789101112],这样是两个区间先确定第k位所在区间的最大的数是几位数,比如这个区间[123456789101112]就
阅读全文
摘要:https://vjudge.net/contest/365635#problem/B 建两层图,因为只能跑一条商业线,可以从正常点向虚拟点建一条单向边For(i,1,m){ in(x);in(y);in(v); push(x,y,v); push(y,x,v); push(x+n,y+n,v);
阅读全文
摘要:https://vjudge.net/contest/365698#problem/J l[i]表示以a[i]为右端点的为负数的情况,r[i]表示为整数。 转移就是这样: if(a[i]<0){ l[i]=r[i-1]+1; r[i]=l[i-1]; } else{ l[i]=l[i-1]; r[i
阅读全文
摘要:这个点的水可以从其他点来,也可以从0号结点来,所以把0号结点当成超级源点,然后跑最小生成树 #include <iostream> #include <cstdio> #include <queue> #include <algorithm> #include <cmath> #include <c
阅读全文