- 博客(10)
- 资源 (4)
- 收藏
- 关注
原创 codeforces 765E dfs
codeforces 765E题意:每次从一棵树中找两根长度相同、起点相同的直链并删去其中一根。重复这个操作,求可以得到的最短直链的长度。需要注意的是树即使已经被删成直链了,如果长度是偶数还可以继续删的。 问题的关键是找到树中的“特殊点”,也就是我上面的图中的所有红点。“特殊点”的特点是它的度>2,且与它相连的直链长度不全相等,即以它为起点,不经过其他度>2的点,到达叶子节点的路径有至少两条,且长度不全相等。
2017-02-15 19:46:32 384
原创 codeforces 765A-C
C题有点坑被hack两次…#include<stdio.h>int main(){int N;scanf("%d",&N);if(N%2)printf("contest");else printf("home");return 0;}#include<stdio.h>int used[300];int main(){char c;while(c=getchar(),c!=EO
2017-02-14 22:35:57 532
原创 codeforces 766E 二进制思想dp
官方题解看了半天硬是没懂… 这题主要是二进制的思想,因为异或是按位运算,可以把每个数按照二进制拆成若干个0和1,对每个”位”建树,然后用动态规划的思想求和。 具体实现方法: 以1为根建dfs树。想象从1到一个叶节点的一条路,又有1到另一个叶节点的一条路。假设我们暴力做,那答案里肯定得分别把这两个结果算出来加进去。那我们现在动态规划,就是尽量找到这两条路的公共部分,然后只算一次(就可以节约时间)。
2017-02-13 23:52:03 445
原创 codeforces 766D 并查集进阶
自己想的是并查集的思路,本题的同反义词相当于同一棵树里有两种“势力”,因此我维护了一个X[]数组,X[i]表示第i个节点与它的父亲的关系,1表示同-1表示异,这样写是为了可以负负得正。回头想想似乎用1和0就可以了,位运算还快一点。 并查集“并优化”的时候同时改变一下X数组,具体方式体现在代码里了。 被注释起来的两行错了我一晚上。一开始写的是1和-1,想了想不对改成x.second,就是没想到y.
2017-02-11 19:45:31 392
原创 codeforces 766A-C
codeforces 766A 766B 766CA就是两串的长度的较大值,或者两个串相等时-1 B题排序后三位一比较,如果有a[n]+a[n+1]>a[n+2]就可以。 C题看着有点吓人,其实第一第二问是可以一起算出来的。dp[i]表示前i个字母有几种,dp[i+1]=dp[i]+dp[i-1]+…+dp[i-k],k是满足从字符
2017-02-10 23:06:36 666
原创 POJ 2251 线段树
也可以用优先队列做哦,每次新加入一个元素的时候就踢掉比这个元素小的那些元素,然后队首就是最大值。 用线段树是基础题。#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int maxn=1048576;int arr[maxn],len,K,Min[maxn*2],Max[maxn
2017-02-10 14:08:27 240
原创 codeforces 19D 线段树
题意:有三种指令:向平面上增加一个点、减少一个点,或者给定一个点,在以它为原点的第一象限内找到x最小的点。如果有多个,要求y最小。坐标范围0到1e9,至多2e5条指令。 #include<stdio.h>#include<set>#include<algorithm>#define _(x) (std::lower_bound(X+1,
2017-02-09 18:20:53 445
AC自动机模板,OI/ACM通用.txt
2018-08-01
软件随想录(More joel on software)中英对照版.pdf
2018-08-01
编程高手箴言 梁肇新.pdf
2018-07-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人