Codeforces Round #656 (Div. 3)

A.Three Pairwise Maximums

首先最大的在原序列中肯定出现至少两次否则不能构造,即min max max,对于答案min min max肯定满足题意

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int main()
{IO;int T;cin>>T;while(T--){int x,y,z;cin>>x>>y>>z;if(x>y) swap(x,y);if(y>z) swap(y,z);if(x>y) swap(x,y);if(z!=y) cout<<"NO"<<endl;else {cout<<"YES"<<endl;cout<<x<<" "<<x<<" "<<y<<endl;}}return 0;
}

B. Restore the Permutation by Merger

第二题直接开个map记录一下就行了。最气的是wa了一次(数组开小了我🤮了)

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=60;//最开始N=50 wa了一次,这种低级错误我🤮了
int mp[N],n;
int main()
{IO;int T;cin>>T;while(T--){memset(mp,0,sizeof mp);cin>>n;for(int i=1;i<=2*n;i++){int a;cin>>a;if(mp[a]) continue;mp[a]=1;cout<<a<<" ";}cout<<endl;}return 0;
}

C. Make It Good

这题就是从后往前找^就行了。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=200010;
int a[N],n;
int main()
{IO;int T;cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];int i=n;for(;i;i--)if(a[i]>a[i-1]) break;int j=i;for(;j;j--) if(a[j]<a[j-1]) break;if(j==0) cout<<j<<endl;else cout<<j-1<<endl;}return 0;
}

D. a-Good String

看数据范围,对于216=655362^{16}=65536216=65536所以直接暴力就行了,分而治之。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
const int N=200010;
int n; 
string s;
int res=0x3f3f3f3f;
void dfs(int l,int r,int x,int ans)
{if(ans>=res) return;if(r==l){if(s[l]!=char('a'+x)) ans++;res=min(res,ans);}int mid=l+r>>1;int cnt1=0,cnt2=0;for(int i=l;i<=mid;i++)if(s[i]!=char('a'+x)) cnt1++;dfs(mid+1,r,x+1,ans+cnt1);for(int i=mid+1;i<=r;i++)if(s[i]!=char('a'+x)) cnt2++;dfs(l,mid,x+1,ans+cnt2);
}
int main()
{IO;int T;cin>>T;while(T--){cin>>n;cin>>s;res=0x3f3f3f3f;dfs(0,n-1,0,0);cout<<res<<endl;}return 0;
}

做了上面四个题,比之前多做一题。-。-还是太菜

E.Directing Edges

昨天晚上打完比赛后,躺在床上就想这个题,突然灵光一现,发现只需要搞个拓扑排序就行了。今天早上起晚了,醒了就赶快写了一下发现漂亮的AC了。
先不考虑无向边,对有向边进行拓扑排序,如果有向边不是拓扑序那么答案肯定是YES否则答案肯定是NO,对于不考虑无向边的拓扑序肯定是一些拓扑序,只要对无向边从拓扑序前面向拓扑序后面连边,肯定不会出现环。对于两个独立的拓扑序,也可以按照上述方式连边。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
typedef pair<int,int> pii;
const int N=200010,M=400010;
int n,m;
int h1[N],h2[N],e[M],ne[M],idx;
bool st[N];
int cnt;
vector<pii> res;
void add(int h[],int a,int b)
{e[idx]=b;ne[idx]=h[a];h[a]=idx++;
}
int q[N],d[N];
bool top_sort()
{int tt=-1,hh=0;for(int i=1;i<=n;i++)if(!d[i]) q[++tt]=i;while(tt>=hh){int t=q[hh++];st[t]=1;for(int i=h2[t];i!=-1;i=ne[i]){int j=e[i];if(st[j]) continue;res.push_back({t,j});}for(int i=h1[t];i!=-1;i=ne[i]){int j=e[i];if(!(--d[j])) q[++tt]=j;}}return tt==n-1;
}
int main()
{IO;int T;cin>>T;while(T--){memset(h1,-1,sizeof h1);memset(h2,-1,sizeof h2);memset(st,0,sizeof st);memset(d,0,sizeof d);idx=0,cnt=0;res.clear();cin>>n>>m;for(int i=0;i<m;i++) {int t,x,y;cin>>t>>x>>y;if(t) {res.push_back({x,y});add(h1,x,y);d[y]++;}else {add(h2,x,y);add(h2,y,x);}}if(!top_sort()) cout<<"NO"<<endl;else{cout<<"YES"<<endl;for(auto t:res) cout<<t.first<<" "<<t.second<<endl;}}return 0;
}

之前每次都是补五题,不过这次的五题可以算是自己独立做出来的(虽然E)所以有时间可以把F、G看看题解更新一下。要加油哦~

F - Removing Leaves

①维护leaf[i]表示与第i个节点相邻叶子(度数为1)的数量
②维护s[i]表示与第i个节点相邻并且不是叶子节点的编号(用STL中的set记录
③优先队列维护leaf[],按照每个节点的叶子数量排序(叶子节点多的优先级高)
每次取出对头,只要能一次删除k个就删除并统计答案同时更新每个点的度数和相邻叶子数量,倘若一个点tleaf[t]==0&&d[t]==1说明该点在删除自己之前的叶子节点后自己变成了叶子节点,那么要更新s[t]中节点的叶子数量(这时候s[t]中有且只有一个节点v),t已经成了叶节点所以需要s[v].erase(t),然后加入队列循环此过程。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<set>
#include<queue>
using namespace std;
const int N=200010,M=400010;
int h[N],e[M],ne[M],idx,d[N];
int n,m;
int leaf[N];//每个点相邻叶子节点的数量
set<int> s[N];//每个点相邻不是叶子节点
struct node
{int id,cnt;bool operator < (const node &o) const{return cnt<o.cnt;}
};
priority_queue<node> heap;
void add(int a,int b)
{e[idx]=b;ne[idx]=h[a];h[a]=idx++;d[b]++;
}
void init()
{for(int i=0;i<=n;i++){s[i].clear();h[i]=-1;d[i]=0;leaf[i]=0;}while(heap.size()) heap.pop();idx=0;
}
void dfs(int u,int fa)
{for(int i=h[u];i!=-1;i=ne[i]){int j=e[i];if(j==fa) continue; //由于边是双向的,需要双向加!!!//d[]>1说明不是叶子节点 d[]==1说明是叶子节点if(d[j]>1) s[u].insert(j); if(d[u]>1) s[j].insert(u);if(d[j]==1) leaf[u]++;if(d[u]==1) leaf[j]++;dfs(j,u);}
}
int main()
{IO;memset(h,-1,sizeof h);int T;cin>>T;while(T--){init();cin>>n>>m;for(int i=1;i<n;i++){int a,b;cin>>a>>b;add(a,b),add(b,a);}if(m==1){cout<<n-1<<endl;continue;}dfs(1,-1);for(int i=1;i<=n;i++)if(leaf[i]>=m) heap.push({i,leaf[i]});int res=0;while(heap.size()){if(heap.top().cnt!=leaf[heap.top().id]) {heap.pop();continue;}int t=heap.top().id;heap.pop();if(leaf[t]<m) break;else {res+=leaf[t]/m;d[t]-=leaf[t]/m*m;leaf[t]%=m;if(leaf[t]==0&&d[t]==1){int v=*s[t].begin();leaf[v]++;s[v].erase(t);if(leaf[v]>=m) heap.push({v,leaf[v]});}}}cout<<res<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LCT】网络(luogu 2173/ZJOI2011)

正题 luogu 2173 题目大意 给你一个图&#xff0c;每条边有有一种颜色&#xff08;numcolor⩽10num_{color}\leqslant 10numcolor​⩽10&#xff09;&#xff0c;保证以下性质&#xff1a; 1.一个点连出的同色边数不大于2 2.不存在同色边组成的环 现在让你进行3钟操作&…

【每日一题】7月13日题目精讲—Kingdom

【每日一题】7月13日题目精讲—Kingdom 文章目录题目描述题解&#xff1a;代码:时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 1048576K&#xff0c;其他语言2097152K 64bit IO Format: %lld题目描述 X王国有n位官员&#xff0c;编号从1到n。国…

P3309-[SDOI2014]向量集【线段树,凸壳】

正题 题目链接:https://www.luogu.com.cn/problem/P3309 题目大意 nnn个操作 在序列末尾加入一个向量(x,y)(x,y)(x,y)询问加入的第l∼rl\sim rl∼r个向量中的一个向量和(x,y)(x,y)(x,y)的点积最大值 强制在线&#xff0c;点积的定义为x1x2y1y2x_1x_2y_1y_2x1​x2​y1​y2​ …

CanalSharp-mysql数据库binlog的增量订阅消费组件Canal的.NET客户端

一.前言CanalSharp是阿里巴巴开源项目mysql数据库binlog的增量订阅&消费组件 Canal 的.NET客户端&#xff0c;关于什么是 Canal&#xff1f;又能做什么&#xff1f;我会在后文为大家一一介绍。CanalSharp 这个项目&#xff0c;是由我和 WithLin(主要贡献) 完成&#xff0c;…

Codeforces Round #657 (Div. 2)

A. Acacius and String 爆零&#xff01;太菜了&#xff0c;下来终于把A题代码调AC了 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<iostream> #include<algorithm> #include<cstring> #include<string> using namespace…

【树链剖分】软件管理(luogu 2146/金牌导航 树链剖分-2)

正题 luogu 2146 金牌导航 树链剖分-2 题目大意 有若干软件&#xff0c;除了软件0&#xff0c;所有软件都依赖且只依赖于另外一个软件 当要删除一个软件时&#xff0c;所有依赖于该软件的软件都要删掉 当安装一个软件时&#xff0c;该软件依赖的软件都要安装 问你每次操作…

【每日一题】7月14日题目精讲—压缩

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 给一个由小写字母组成的字符串&#xff0c;我们可以用一种简单的方法来压缩其中的重复…

P3306-[SDOI2013]随机数生成器【BSGS】

正题 题目链接:https://www.luogu.com.cn/problem/P3306 题目大意 给出一个p,a,b,x1,tp,a,b,x_1,tp,a,b,x1​,t&#xff0c;有xiaxi−1bx_iax_{i-1}bxi​axi−1​b 求一个最小的nnn使得xntx_ntxn​t 解题思路 下标缩一下先变成x0x_0x0​会更好算一点&#xff0c;只考虑x0x_0…

【DevOps+LIVE】直播复盘 – DevOps能力成长模型2018首发

昨天晚上小编和DevOpsDays中国核心组织者刘征老师和张乐老师一起嗨了一把&#xff0c;本来规划进行1小时的直播结果延长到了2个小时才结束&#xff0c;观众人数在前半段一直处于增长状态&#xff0c;直到开播一小时到达顶峰。小伙伴也非常给力&#xff0c;一共提出了40多个问题…

Codeforces Round #658 (Div. 2)

A - Common Subsequence 最短相同子序列长度肯定为1&#xff0c;如果一个元素都不相等之间不存在相同子序列 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include…

【树链剖分】染色(luogu 2486/金牌导航 树链剖分-3)

正题 luogu 2486 金牌导航 树链剖分-3 题目大意 给你一棵树&#xff0c;让你进行以下操作&#xff1a; 1.把一条路径染上一个颜色 2.查询一条路径上有多少个颜色段 解题思路 用树链剖分把问题转化为链上问题 然后维护一下左右端点颜色和颜色总数就好了 代码 #include<c…

小小粉刷匠

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 “lalala,我是一个快乐的粉刷匠”,小名一边快活地唱着歌,一边开心地刷着墙",兴致突…

P5363-[SDOI2019]移动金币【阶梯博弈,dp,组合数学】

正题 题目链接:https://www.luogu.com.cn/problem/P5363 题目大意 1n1\times n1n的网格上有mmm个硬币&#xff0c;两个人轮流向前移动一个硬币但是不能超过前一个硬币&#xff0c;无法移动者输。 求有多少种情况先手必胜。 解题思路 竟然有我会的题&#xff0c;我感动 位置做…

M-SOLUTIONS Programming Contest 2020总结

A - Kyu in AtCoder 直接模拟 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<iostream> #include<algorithm> using namespace std; int main(…

Emit动态代理.NetCore迁移之旅

前言】前面我们介绍了Aop 从静态代理到动态代理&#xff1a;https://www.cnblogs.com/7tiny/p/9657451.html我们在.NetFramework平台下使用微软提供的Emit技术实现了动态代理类的生成。但是.NetCore作为微软.Net平台的春天&#xff0c;如果类库光支持.NetFramework&#xff0c;…

【LCT】弹飞绵羊(luogu 3203/金牌导航 LCT-2)

正题 luogu 3203 金牌导航 LCT-2 题目大意 给你n个格子&#xff0c;当你在第i个格子时&#xff0c;可以往后跳aia_iai​格&#xff0c;让你进行几下操作&#xff1a; 1.修改第i个数 2.查询在第i个格子跳多少下会跳出界 解题思路 往后跳相当于连接格子&#xff0c;由此建立一…

【每日一题】7月15日题目精讲—生日快乐

【每日一题】7月15日题目精讲—生日快乐 [SCOI2009]生日快乐 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 windy的生日到了&#xff0c;为了庆祝生日&#xff0c;他的朋友…

P1712-[NOI2016]区间【线段树,尺取法】

正题 题目链接:https://www.luogu.com.cn/problem/P1712 题目大意 nnn个区间&#xff0c;求出其中mmm个区间使得它们有覆盖同一个点且最长区间长度减去最短长度最小。 解题思路 因为是最接近的mmm个&#xff0c;考虑一种叫尺取法的做法。 先把区间按照长度排序&#xff0c;每…

Codeforces Round #659 (Div. 2)

日常爆零掉分wa A. Common Prefixes 根据前一个字符串构造后一个字符串&#xff0c;从哪不同就从哪换 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<i…

asp.net core结合Gitlab-CI实现自动化部署

一、前言在之前的文章中写过k8sJenkinsGitLab-自动化部署asp.net core项目 的topic&#xff0c;这次讲解一下gitlab-ci的CI/CD&#xff0c;说实话&#xff0c;自动化部署是在是非常的舒服&#xff0c;而且gitlab-ci很适合中小项目的部署&#xff0c;大项目推荐使用k8s。阅读目录…