省选前的CF题
RT,即将退役的人懒得一篇篇写题解,于是有了这个东西
CF1004E
树上选一条不超过k个点的链,最小化其余点到链上点的最大距离
这个思路很有意思,不像平时一般的树上问题,是从叶子开始一点点贪心合并直到合得只剩一条链,这条链就是最后的答案
用优先队列完成,复杂度$O(n\log n)$
#include<set>
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
struct a{int pts,len;};
bool operator < (a x,a y)
{
return x.len>y.len;
}
set<pair<int,int> > st[N];
priority_queue<a> hp;
int n,k,t1,t2,t3,siz,ans;
int main()
{
scanf("%d%d",&n,&k),siz=n;
for(int i=;i<n;i++)
{
scanf("%d%d%d",&t1,&t2,&t3);
st[t1].insert(make_pair(t2,t3));
st[t2].insert(make_pair(t1,t3));
}
for(int i=;i<=n;i++)
if(st[i].size()==)
hp.push((a){i,(*st[i].begin()).second});
while(hp.size()>||k<siz)
{
a mn=hp.top(); hp.pop(),siz--,ans=mn.len;
int p=mn.pts,nxt=(*st[p].begin()).first;
st[nxt].erase(st[nxt].lower_bound(make_pair(p,)));
if(st[nxt].size()==)
hp.push((a){nxt,ans+(*st[nxt].begin()).second});
}
printf("%d",ans);
return ;
}
CF772D
题面看题吧
感觉这题没啥意义,因为考场不太可能想出来
这个东西可以理解为十进制下的“与”(=。=???),记录每个权值出现的次数,出现的和,出现的平方和,搞一个十进制FWT来做
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+,M=1e6,mod=1e9+;
int n,rd,a[N],b[N],c[N],f[N],pw2[N]; long long ans;
void Add(int &x,int y)
{
x+=y;
if(x>=mod) x-=mod;
}
void Trans(int *arr,int typ)
{
if(~typ)
{
for(int i=;i<M;i*=)
for(int j=M-;~j;j--)
if(j/i%) Add(arr[j-i],arr[j]);
}
else
{
for(int i=;i<M;i*=)
for(int j=;j<M;j++)
if(j/i%) Add(arr[j-i],mod-arr[j]);
}
}
int main()
{
scanf("%d",&n),pw2[]=;
for(int i=;i<=n;i++) pw2[i]=2ll*pw2[i-]%mod;
for(int i=;i<=n;i++)
{
scanf("%d",&rd);
a[rd]++,Add(b[rd],rd),Add(c[rd],1ll*rd*rd%mod);
}
Trans(a,),Trans(b,),Trans(c,);
for(int i=;i<M;i++)
if(a[i]) f[i]=(a[i]==)?c[i]:1ll*pw2[a[i]-]*(1ll*b[i]*b[i]%mod+c[i])%mod;
Trans(f,-);
for(int i=;i<M;i++) ans^=1ll*i*f[i];
printf("%lld",ans);
return ;
}
CF908D
据yjc说是NOIP前留的题,然而我并不会,wsl
设$dp[i][j]$表示前缀中有i个a和j个ab的期望,在i+j>=k时到达边界,用高中数学讲的 等差数列*等比数列 算一算
答案是dp[1][0],因为dp[0][0]在没有a的时候会自己转移自己
代码咕咕了
CF908H
调了一下午,不知道为啥过不去,重构了一遍好了。。。。。。
先把AND的连起来,然后一个联通块里XOR判无解,剩下的XOR连边之后相当于选不相交独立集并起来,DP+容斥到有方案就输出
注意不用管siz=1的
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#define vint vector<int>
#define vit vector<int> ::iterator
using namespace std;
const int N=,M=(<<)+,mod=;
int n,m,aset[N],siz[N],idx[N],sta[N],bit[M],pw[M],dp[M]; char str[N][N];
int Finda(int x)
{
return x==aset[x]?x:aset[x]=Finda(aset[x]);
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%s",str[i]+),aset[i]=i,siz[i]=;
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
if(str[i][j]=='A')
{
int fx=Finda(i),fy=Finda(j);
if(fx!=fy) aset[fy]=fx,siz[fx]+=siz[fy];
}
memset(idx,-,sizeof idx);
for(int i=;i<=n;i++)
if(Finda(i)==i&&siz[i]>) idx[i]=m++;
for(int i=;i<m;i++) sta[i]|=<<i;
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
if(str[i][j]=='X')
{
int fx=Finda(i),fy=Finda(j);
if(fx==fy) printf("-1"),exit();
if(~idx[fx]&&~idx[fy])
{
sta[idx[fx]]|=<<idx[fy];
sta[idx[fy]]|=<<idx[fx];
}
}
dp[]=; int all=(<<m)-;
for(int i=;i<=all;i++)
{
int lbt=i&-i;
bit[i]=bit[i>>]+(i&);
dp[i]=(dp[i^lbt]+dp[i^(sta[(int)log2(lbt)]&i)])%mod;
}
for(int i=;i<=all;i++) pw[i]=;
for(int i=;i<=n;i++)
{
int tmp=;
for(int j=all;~j;j--)
{
if((m-bit[j])&) (tmp+=mod-pw[j])%=mod;
else (tmp+=pw[j])%=mod;
pw[j]=1ll*pw[j]*dp[j]%mod;
}
if(tmp) printf("%d",n-+i),exit();
}
return ;
}
CF1140
肥肠爆芡,因为沙茶博主看不懂E和之后的题解,这场比赛咕了
省选前的CF题的更多相关文章
- 省选前的th题
沙茶博主终于整完了知识点并学完了早该在NOIP之前学的知识们 于是终于开始见题了,之前那个奇怪的题单的结果就是这个了 题目按沙茶博主的做题顺序排序 个人感觉(暂时)意义不大的已被自动忽略 洛谷 491 ...
- 省选前的JOI
RT,发现找不到题,于是又开了新坑 JOI特色:重思考,代码难度(相比NOI系列)基本没有 (省选前到处挖坑2333) JOI 2017 Final 焚风现象 差分,莫得了 (不是看到200ms就tm ...
- [TaskList] 省选前板子补完计划
省选前本子补完计划 [ ] 带权并查集 [ ] 树上莫队 - UOJ58 [WC2013]糖果公园 loj2485「CEOI2017」Chase
- [OI]省选前模板整理
省选前把板子整理一遍,如果发现有脑抽写错的情况,欢迎各位神犇打脸 :) 数学知识 数论: //组合数 //C(n,m) 在n个数中选m个的方案数 ll C[N][N]; void get_C(int ...
- csp退役前的做题计划1(真)
csp退役前的做题计划1(真) 因为我太菜了,所以在第一次月考就会退役,还是记录一下每天做了什么题目吧. 任务计划 [ ] Z算法(Z Algorithm) 9.28 [x] ARC061C たくさん ...
- 解决el-tree lazy懒加载时,连续勾选前两个子节点后第二次进入默认选中时,将父节点也勾选的问题
在用到el-tree的懒加载和默认勾选功能时,若第一次勾选前几个连续节点,第二次进入默认勾选时,由于el-tree子节点尚未完全加载(只加载出来前几个),默认勾选已经开始(已加载出来的子节点被默认勾选 ...
- yyb省选前的一些计划
突然意识到有一些题目的计划,才可以减少大量查水表或者找题目的时间. 所以我决定这样子处理. 按照这个链接慢慢做. 当然不可能只做省选题了. 需要适时候夹杂一些其他的题目. 比如\(agc/arc/cf ...
- NOIP前的刷题记录
因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数 组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...
- 【POJ各种模板汇总】(写在逆风省选前)(不断更新中)
1.POJ1258 水水的prim……不过poj上硬是没过,wikioi上的原题却过了 #include<cstring> #include<algorithm> #inclu ...
随机推荐
- Jenkins自动构建Unity
1.下载安装Jenkins 链接:https://jenkins.io/. 2.安装推荐plugins NOTE:安装失败的话,后面进入管理plugins的高级选项中,将更新站点设置为:http:// ...
- 如何用chrome查看post get及返回的数据
chrome浏览器按下F12打开开发者工具 点击Network,找到过滤器 筛选XHR,Method那一列会显示POST GET:
- Linux 第八周实验 进程的切换和系统的一般执行过程
姬梦馨 原创作品 <Linux内核分析>MOOC课程:http://mooc.study.163.com/course/USTC-1000029000 第八讲 进程的切换和系统的一般执行过 ...
- 《面向对象程序设计》c++第五次作业___calculator plus plus
c++第五次作业 Calculator plusplus 代码传送门 PS:这次作业仍然orz感谢一位同学与一位学长的windows帮助,同时再次吐槽作业对Mac系统用户的不友好.(没朋友千万别用Ma ...
- "一个程序员的生命周期"读后感
这篇文章中作者叙述了自己和大多数大学生或许都会面对的问题,即是会走过挺多的歪路,面临很多的困难和压力,但是作者却从未放弃自己真正追求的东西.对于一个过来人的经验之谈,我们应该吸取经验,在大学好好去奋斗 ...
- 基础-Math.floor与parseInt区别
Math.floor只能对一个数向下取整,不能解析字符串 如: Math.floor(1.5) // 1 Math.floor(-2.1) // -3 Math.floor("3" ...
- Mock.js的简单使用
Mock.js 提供的种类有: 步骤: 首先安装:cnpm install mockjs 创建一个mock.js的文件,写好需要引入的数据格式 在main.js中引入mock.js文件: requir ...
- ASP.NET MVC4学习笔记
一.MVC简介
- [MS] 微软官网下载安装SQLSERVER2019的rpm
快速入门:安装 SQL Server 和 Red Hat 上创建数据库 https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-co ...
- session存入redis
Session信息入Redis Session简介 session,中文经常翻译为会话,其本来的含义是 指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一 ...