省选前的CF题

RT,即将退役的人懒得一篇篇写题解,于是有了这个东西



CF1004E

树上选一条不超过k个点的链,最小化其余点到链上点的最大距离

这个思路很有意思,不像平时一般的树上问题,是从叶子开始一点点贪心合并直到合得只剩一条链,这条链就是最后的答案

用优先队列完成,复杂度$O(n\log n)$

 1 #include<set>
 2 #include<queue>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<algorithm>
 6 using namespace std;
 7 const int N=200005;
 8 struct a{int pts,len;};
 9 bool operator < (a x,a y)
10 {
11     return x.len>y.len;
12 }
13 set<pair<int,int> > st[N];
14 priority_queue<a> hp;
15 int n,k,t1,t2,t3,siz,ans;
16 int main()
17 {
18     scanf("%d%d",&n,&k),siz=n;
19     for(int i=1;i<n;i++)
20     {
21         scanf("%d%d%d",&t1,&t2,&t3);
22         st[t1].insert(make_pair(t2,t3));
23         st[t2].insert(make_pair(t1,t3));
24     }
25     for(int i=1;i<=n;i++)
26         if(st[i].size()==1)
27             hp.push((a){i,(*st[i].begin()).second});
28     while(hp.size()>2||k<siz)
29     {
30         a mn=hp.top(); hp.pop(),siz--,ans=mn.len;
31         int p=mn.pts,nxt=(*st[p].begin()).first;
32         st[nxt].erase(st[nxt].lower_bound(make_pair(p,0)));
33         if(st[nxt].size()==1)
34             hp.push((a){nxt,ans+(*st[nxt].begin()).second});
35     }
36     printf("%d",ans);
37     return 0;
38 }

CF772D

题面看题吧

感觉这题没啥意义,因为考场不太可能想出来

这个东西可以理解为十进制下的“与”(=。=???),记录每个权值出现的次数,出现的和,出现的平方和,搞一个十进制FWT来做

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N=1e6+60,M=1e6,mod=1e9+7;
 6 int n,rd,a[N],b[N],c[N],f[N],pw2[N]; long long ans;
 7 void Add(int &x,int y)
 8 {
 9     x+=y;
10     if(x>=mod) x-=mod;
11 }
12 void Trans(int *arr,int typ)
13 {
14     if(~typ)
15     {
16         for(int i=1;i<M;i*=10)
17             for(int j=M-1;~j;j--)
18                 if(j/i%10) Add(arr[j-i],arr[j]);
19     }
20     else
21     {
22         for(int i=1;i<M;i*=10)
23             for(int j=0;j<M;j++)
24                 if(j/i%10) Add(arr[j-i],mod-arr[j]);
25     }
26 }
27 int main()
28 {
29     scanf("%d",&n),pw2[0]=1;
30     for(int i=1;i<=n;i++) pw2[i]=2ll*pw2[i-1]%mod;
31     for(int i=1;i<=n;i++)
32     {
33         scanf("%d",&rd);
34         a[rd]++,Add(b[rd],rd),Add(c[rd],1ll*rd*rd%mod);
35     }
36     Trans(a,1),Trans(b,1),Trans(c,1);
37     for(int i=0;i<M;i++)
38         if(a[i]) f[i]=(a[i]==1)?c[i]:1ll*pw2[a[i]-2]*(1ll*b[i]*b[i]%mod+c[i])%mod;
39     Trans(f,-1);
40     for(int i=0;i<M;i++) ans^=1ll*i*f[i];
41     printf("%lld",ans);
42     return 0;
43 }

CF咕德拜2017集合(雾

D.New Year and Arbitrary Arrangement

据yjc说是NOIP前留的题,然而我并不会,wsl

设$dp[i][j]$表示前缀中有i个a和j个ab的期望,在i+j>=k时到达边界,用高中数学讲的 等差数列*等比数列 算一算

答案是dp[1][0],因为dp[0][0]在没有a的时候会自己转移自己

代码咕咕了

E.New Year and Entity Enumeration

原文地址:https://www.cnblogs.com/ydnhaha/p/10585783.html

时间: 2024-08-01 17:04:08

省选前的CF题的相关文章

省选前的做题记录(Round2)

[CF1109B] Sasha and One More Name 先把无解情况aaabaaa.aaaaaa判掉,然后我们可以证明答案不会超过2. 对于一个回文串,两个指针从两端向内移动直到字符发生变化,在这里看一刀然后交换左右两端即为一种合法方案. 所以我们只需要判断答案是否能为\(1\),暴力判即可. [CF1109C] Sasha and a Patient Friend 假设我们有一个序列数据结构,那么先考虑每个结点需要维护哪些值才能支持合并左右儿子. 维护: 当前点时刻\(time\)

HDU 1031 Design T-Shirt 选前k大

相当于给出一组数列,然后选择前K大的数的算法. 本题没有给出详细的数据,故此就使用动态分配空间的方法了. 而这种题最好的算法就是使用快排思想,期望时间效率就是O(n)了. 最基本入门解决这种题的算法是直接排序了.那就成了水代码了.用上快排的思想才能体现出水平. 不过这种快排实在考的太多了,建议一定要掌握. 每次做这个算法的题目总会要调试一定时间的,每次都出现奇葩的错误.看来还是不够细心. 做题的时候一定要排除杂念,有干扰,后果很严重,会花长很多时间. 靖空间做题,一定要静,达到一种禅的境界.说禅

退役前的做题记录5.0

退役前的做题记录5.0 出于某种原因新开了一篇. [CodeChef]Querying on a Grid 对序列建立分治结构,每次处理\((l,mid,r)\)时,以\(mid\)为源点建立最短路树,这样跨越\(mid\)的点对之间的最短路一定会经过\(mid\),因此两点之间的最短路径就可以描述成最短路树上的两段到根路径.对每棵最短路树处理\(dfs\)序,用树状数组维护权值修改即可. [Wannafly挑战赛4F]线路规划 类似SCOI2016萌萌哒一题,并查集\(f_{i,j}\)表示从

[信息学]省选前模板整理

省选前把板子整理一遍,如果发现有脑抽写错的情况,欢迎各位神犇打脸 :) 数学知识 数论: //组合数 //C(n,m) 在n个数中选m个的方案数 ll C[N][N]; void get_C(int n) { for(int i=1;i<=n;i++) { C[i][i]=C[i][0]=1; for(int j=1;j<i;j++) C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod; } } //欧几里得算法 //(a,b) ll gcd(ll a,ll b) { re

省选前模板复习

PREFACE 也许是OI生涯最后一场正式比赛了,说是省选前模板,其实都是非常基础的东西,穿插了英文介绍和部分代码实现 祝各位参加JXOI2019的都加油吧 也希望今年JX能翻身,在国赛中夺金 数学知识 见数学知识小结 字符串 KMP算法Knuth-Morris-Pratt Algorithm KMP算法,又称模式匹配算法,是用来在一个文本串(text string)s中找到所有模式串(pattern)w出现的位置. 它是通过当失配(mismatch)发生时,模式串本身能提供足够的信息来决定下一

csp退役前的做题计划1(真)

csp退役前的做题计划1(真) 因为我太菜了,所以在第一次月考就会退役,还是记录一下每天做了什么题目吧. 任务计划 [ ] Z算法(Z Algorithm) 9.28 [x] ARC061C たくさんの数式 / Many Formulas [x] ARC061D すぬけ君の塗り絵 / Snuke's Coloring [x] ARC061E すぬけ君の地下鉄旅行 / Snuke's Subway Trip [x] ARC061F 3人でカードゲーム / Card Game for Three [

退役前的做题记录3

[CERC2017]Gambling Guide 设 \(f_u\) 表示 \(u\) 到 \(n\) 的期望. \(f_n=0\) \[f_u=1+\sum_{v\in suf_v}\frac{min(f_u,f_v)}{d_u}\] \[\rightarrow f_u=1+\sum_{v\in suf_u,f_v<f_u}\frac{f_v}{d_u}+\sum_{v\in suf_u,f_v\ge f_u}\frac{f_u}{d_u}\] \[\rightarrow f_u=\sum_{

写在省选前

以往我都会对每一场比赛进行很长时间的yy,把各种可能的结果都想了.后来结果出来既不会太糟又不会太好. 但是我很久没有享受过一场比赛了. gdkoi的时候我被虐的很惨,然后我很生气,然后我想在最后的时候争取一下.我还记得那天晚上,我一页一页翻看云的空间,整理了109道题,对自己说:写完它. 我写下那篇退役?再搏一次! 结果是没有写完,我觉得原因是我在最后的时候还是有点偷懒的. 但是我争取了.我觉得我没写完这个结果我可以接受,或者如果我写完它我可能会很高兴吧.但是更重要的时,从里面的题,我回顾了我这

关于刷课机的自己的一些看法(15选1第6题)

现在有好多的刷机软件,游戏外挂,某某破解程序,注册机等等,都打破了常规的软件的正常运行顺序,达到别人很难做到的结果. 有了刷课机,我们不必时刻等待在电脑前不断的刷新来选课,节省了啦好多时间,相反的,那些不用刷课软件的未必能够选上想要的课,对于前者而言,后者有点不懂快捷,太傻太天真,对于后者而言,前者就是作弊,这是不公平的,应该被遏制..... 而对于好多用户来说,刷票软件才是真正的神兵利器,有了它我们就能在第一时间抢到并下单,多么的方便,反而可悲的就是,在火车站排队好久,但是买不到回家的票才是最