秦皇岛2020CCPC补题
秦皇岛2020CCPC A,E,F,G,I,K
A. A Greeting from Qinhuangdao
知识点:简单题
复杂度:\(O(logn)\)
#include
using namespace std;
#define rep(i,l,r) for(int i=l,_##i=r;i<=_##i;i++)
#define per(i,r,l) for(int i=r,_##i=l;i>=_##i;i--)
#define ll long long
#define fi first
#define se second
template using vc = vector;
void solve()
{
ll n, m;
cin >> n >> m;
ll f = n * (n - 1);
ll g = (m + n) * (m + n - 1);
ll gc = __gcd(f, g);
f /= gc;
g /= gc;
cout << f << '/' << g << endl;
}
signed main()
{
ios::sync_with_stdio(0), cin.tie(0);
int T = 1;
cin >> T;
rep(i, 1, T)
{
cout << "Case #" << i << ": ";
solve();
}
}
E. Exam Results
知识点:贪心
复杂度:\(O(nlogn+n)\)
这题我很快就有了思路,但是只是在脑海中过了一遍,其实少考虑了一些情况,所以直接WA了一发
然后debug时看到一个变量爆 \(int\) 了,以为是这里错了,又WA一发,
最后还是在队友的帮助下考虑到了错误的情况,属实不应该交的那么快
我们将所有的分数和对应的人放在一起,按分数为权值排序,然后枚举最大值, 知识点:并查集 这题是队友A的,但是由于我少清空了w数组WA了一发 我们观察,当一个朋友关系连接两个连通块时,不看该边时,这两个连通块至少是两颗树,所以当我让这两个连通块连接时,重新选择连通块时,不会让这两个连通块的答案更少G. Good Number
知识点:简单题 这题有点小恶心,注意判断边界即可 知识点:线性代数 只要能想到题解中的 任意时刻,能到达的点集可使用两个基向量表示,该题就很简单了 知识点:树形dp 头一次被卡常,2s时限,1800ms过的,一开始使用vector开空间有个小常数T了 对于每一个点来说,我们按照子树的最大深度进行排序, 当一个人的两个分数都大于此时的最大值时,该最大值不合法 ?? 如果另一个连通块是树(树有n个点,n-1条边),则该连通块的权值会+1+(n-1)-n,如果有更多的边时,答案会更优 ??
此时我们能得到及格线 \(p\%*max\) 用双指针就能快速得到有多少个人及格,
需要注意的是及格线 \(p\%*max\) 要上取整,并且枚举的最大值要合法F. Friendly Group
复杂度:\(O(n)\)
我真该死啊.jpg
复杂度:\(O(log^2n)\)
#include
I. Interstellar Hunter
复杂度:\(O(Qlog(x+y))\)
简单模拟下,乱搞就过了,可以让其中一个基向量平行与x轴或者y轴,可以减少很多情况
#include
K. Kingdom's Power
复杂度:\(O(nlogn)\)
除了去第一颗子树的士兵一定是从根节点来的,
否则我们需要考虑去当前子树的士兵是从根节点来的还是上一颗子树的最大深度来的
简单的都不像树形dp,有点像套着树形dp的贪心
#include