摘要:
非常好的一个题,第一眼看到就觉得是贪心或者DP。 首先,一开始的思路是枚举第k天,然后把第k天最大的放入,但是保证每天放入剩下的树中对于这一天最大的,不一定是最优方案,所以不能枚举了。 正解:dp,dp[i][j]表示到第i棵树,天数为j的最大代价。 转移很简单,但是这里直接去dp,还不太对,因为有 阅读全文
摘要:
这题的话不是很难,个人感觉难的地方就是求出矩形第四个点的坐标。 对于第四个点的坐标,先用向量垂直来找出直角顶点,然后就可以用矩形中点的坐标来求出第四个点的坐标。 然后就是连边跑个最短路就行。 中间建图连i -> j,然后就忘了j -> i。(亿点点问题 #include<bits/stdc++.h> 阅读全文
摘要:
A:签到: #include<bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<LL,int> pii; const int N = 1005; const int M = 1e6+5; const LL M 阅读全文
摘要:
求区间的素数个数。 可以构造一个积性函数f(i) = 1. 然后Min25筛统计质数和即可。 这里习惯性把F(x)写成了prime[i],其实应该是1. 对Min25的理解又加深了很多~ #include<bits/stdc++.h> using namespace std; typedef lon 阅读全文
摘要:
这题就是Min25筛素数和。 但是一直TLE,然后调试了很久,发现如果在计算素数和的过程中取模,就会导致超时。(离谱) 给出解决思路:n = 1e11,里面的素数和不会爆longlong,所以对在求解素数和的时候,不需要去取模,最后对答案取模就行。 至于求解素数和:可以看成求解f[i] = i的质数 阅读全文
摘要:
第一道黑题,虽然是模板题~。 Min25筛. 将多项式转化$f(i) = i*(i - 1) \rightarrow f(i) = i*i - i$。 对所以对于后面的g = g2 - g1。定义g2 为关于i*i的函数,g1为关于i的函数。 那么对于s出删去的实际是g2 - g1的j = 0时候的 阅读全文
摘要:
前言:It's hard, but keep going 花了n久的时间,终于可以算是理解了吧~ Min25筛:适用于求解积性函数f(i)的前缀和问题。 对于这个积性函数,需要满足$f(p^{k})$可以快速求出。 关于这个快速求出,就是可以理解为$f(p^{k})$是一个关于p的低阶多项式。 因为 阅读全文
摘要:
A:又又又读错题了~ 如果1和0的个数一样,就删完1. 如果0的个数多,也删完0. 然后1的个数多,那就留下偶数个1即可 #include<bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<LL,int> p 阅读全文
摘要:
https://codeforces.ml/gym/101021/problem/1 入门题。 对于交互式题目,就是通过自己询问的结果来判断下一次询问最后得出结果的过程。 对于打印出来的结果,都必须用fflush(stdout)来强制清空 #include<bits/stdc++.h> using 阅读全文
摘要:
这题有很多的做法。 首先最远的两个点很显然是直径。 然后和之前做的一道直径合并很像。 我们知道这里是一个单点修改,修改了之后会影响它的父节点以上的情况。 那么,我们又知道dfs序满足子节点的dfs序在父节点的dfs序内部。 那么我们可以用线段树去维护dfs的区间直径。 然后显然这个区间是子树的包含关 阅读全文