随笔分类 - ACM
大二到大三不堪回首的记忆....
    
摘要:原题链接 考察:博弈论 思路: sg函数打表找规律,发现n%(p+q)后,若1<=n<=p则必败. 想说一下的就是,sg函数的必败点不能定义为>0的数.这样会让某些必胜点sg(x)>0被判断必败. Code #include <iostream> #include <cstring> #includ
        阅读全文
                
摘要:原题链接 考察:博弈论 思路: 每次可以选择两个方向,往正方向走,如果0在偶数个位置必胜.往反方向走,如果0在离n+1的距离有偶数个距离也必胜. ##Code #include <iostream> #include <algorithm> using namespace std; const in
        阅读全文
                
摘要:原题链接 考察:构造 思路: 异或和为u,数值和为v.如何判断不可能成立? u>v 即不成立.很明显因为u是v的不进位加法. u&1 != v&1 .正如上面说u是v的不进位加法.进位是不会改变奇偶性的.理性证明就是 v = u + 2*(u&v) u&v得到u哪些位置该进位,把它们左移一位即可. 
        阅读全文
                
摘要:原题链接 考察:构造 思路: 求所有构造图内任意两点Mex(u,v)最大值最小的构造图. 考虑如何求Mex(u,v)的最大值.在同张图上,路径更长的边比路径更短的边Mex值要大.所以我们考虑树上的"链". 如果只有一条链,任意构造即可. 如果有>1条链子,由贪心思想,我们不要让0,1,2..在一条边
        阅读全文
                
摘要:原题链接 考察:思维 思路: 我是菜狗,连A题都不会.这道题实际就是1和n-1. ##Code #include <iostream> using namespace std; int n; int main() { int T; scanf("%d",&T); while(T--) { scanf
        阅读全文
                
摘要:原题链接 考察:线段树 思路: 如果做过校门外的树(增强版)那道题,应该可以想到是建立两个线段树.一个维护基友和女神约会时间tr[0],一个维护女神时间tr[1]. 对于基友相约t,我们求出tr[0]的t个空白时间的最左端点,然后更新tr[0];对于女神相约t,先求出tr[0]的左端点,没有就求tr
        阅读全文
                
摘要:原题链接 考察:线段树 思路: 和校门外的树(增强版)那道题差不多,我们不用管哪些瓶子有花,哪些没有.只要add,范围内从小到大 = 1.只要删除,sum[l,r] = 0. #Code #include <iostream> #include <cstring> using namespace s
        阅读全文
                
摘要:原题链接 考察:线段树 思路: 维护序列的扩展版. 1操作 : 区间修改 2操作 : 区间修改 3操作 : 类似线段树染色的区间修改. 4操作 : 区间查询. 对于操作1,2,3考虑每个操作如何影响需要维护的平方和,立方和. 原平方和: a2+b2+c2+... 操作1后: (a+x)2+(b+x)
        阅读全文
                
摘要:原题链接 考察:线段树 思路: 线段树染色+dfs序. 关于dfs序的讲解GO! ##Code #include <iostream> #include <cstring> using namespace std; const int N = 50010; int n,sz[N],h[N],idx,
        阅读全文
                
摘要:原题链接 考察:线段树 完全没思路,乍一眼看还以为是并查集. 大佬的思路: D操作:单点修改 R操作: 单点修改 Q操作: 区间查询 我:??? 思路: 这道题求最大的连通数的思想有点类似这题Imbalanced Array CodeForces - 817D 因为村庄都是一维的,所以最大连通数一定
        阅读全文
                
摘要:原题链接 考察:线段树(扫描线) 三维扫描线求重合>=3次的体积. 完全没想出来三维怎么推,结果发现是切片(.) 思路: 从小到大枚举z.求平面在枚举z范围内的重合>=3次的面积.ans累加即可. 这里求重合>=3次的不能用之前的懒标记法了.每个点遍历1000*2*N遍会TLE.因此采用更好的优化思
        阅读全文
                
摘要:原题链接 考察:线段树 扫描线求周长 思路: 以x轴为例,先看图. 由此就比较好求了.这里cnt有值就可以贡献长度,所以可以不用push_down. Code #include <iostream> #include <cstring> #include <algorithm> #include <
        阅读全文
                
摘要:原题链接 考察:线段树(扫描线) 通过本题终于稍微弄懂点扫描线了. 思路: 之前的HDU 1542 Atlantis.因为只要在修改前出现过一次就会被计入长度.且区间总是成对出现,也就是不用处理新的区间. 本题只有出现次数>1才会被记录有效长度,此时在修改前需要处理新出现的cnt>1的区间.即需要将
        阅读全文
                
摘要:原题链接 考察:线段树+剪枝 思路: 参考大佬的思路.线段树也能剪枝是我没想到的. 最大的数263最多开方6次就会变成1.考虑到这点可以考虑暴力.每次修改[l,r]实际转化为单点修改,但是要进行剪枝,如果当前区间的最大值已经 = 1,那么就没必要在往下搜. 时间复杂度最坏是O(6*4*N+1e5*l
        阅读全文
                
摘要:原题链接 考察:线段树 思路: 还是线段树染色问题.. 但还是和上一题有点区别,单以样例1来说: 5 0 4 4 > 1 5 5 0 3 1 > 1 4 2 3 4 2 > 4 5 3 0 2 2 > 1 3 3 0 2 3 > 1 3 4 颜色与我们定义线段树区间颜色表示相冲突,所以进行坐标偏移.
        阅读全文
                
摘要:原题链接 考察:线段树 线段树染色问题 思路: 每次张贴海报都是一次区间修改.而染色区间l,r范围过大.需要离散化.离散化后就可以定义线段树了. struct Node{ int l,r,c;//l,r左右端点.c为该区间的颜色,同时也是懒标记 }tr[N<<3]; 这里定义c为该区间颜色种类是不可
        阅读全文
                
摘要:原题链接 考察:线段树 or 模拟 模拟是很简单啦,主要考虑线段树怎么写,本题的线段树比较特殊. 思路: 基本是参考了大佬的题解.本题的懒标记过于特殊把我写懵了.... 操作 0:砍掉[l,r]区间的树与树苗 操作 1:种植[l,r]区间的树苗. 抽象到线段树操作就是 0: [l,r]区间 树数组-
        阅读全文
                
摘要:原题链接 考察:线段树 思路: 很明显是设置两个懒标记,tag_1标记修改的累加和,tag_2标记修改的累乘积.但是直接这么写会WA,原因是具有运算优先级.假设修改区间为s,s*c1+c2 与 s*c2+c1是完全不同的结果. 需要统一运算优先级.也就是规定先乘还是后乘.如果我们后乘,即(s+c)*
        阅读全文
                
摘要:原题链接 考察:线段树(扫描线) 思路: 其实是扫描线入门题.(然后就看了很久才略懂) 本题思路还是直接看大佬博客吧GO 想解释的只有几个问题. 为什么结构体如此定义? struct Node{ int l,r,cnt;//实际代表含义是[l,r+1]区间 double len;//cnt是指该区间
        阅读全文
                
摘要:原题链接 考察:线段树 思路: 第一个操作:表示把 A[l],A[l+1],…,A[r] 都加上 d.显而易见的差分优化为单点修改. 第二个操作:求[L,R]区间的gcd. 通过这两个操作思考怎么定义结构体.模板L,R然后很明显需要一个变量val记录[L,R]区间内的gcd.但是如果我们把线段树维护
        阅读全文
                
                    
                
浙公网安备 33010602011771号