【CodeForces训练记录】Codeforces Round 998 (Div. 3)

news/2025/1/20 1:07:26/文章来源:https://www.cnblogs.com/longxingx/p/18680605

训练情况

赛后反思

div3 给罚时拉满了,C题 \(k-a_i=a_i\) 的情况错掉怒罚五发,D题成结论猜猜乐了,E题看错题了,以为是边一致,实则联通就行,又被并查集背刺了

A题

斐波那契第三位可以从第一二位算出来,也可以从第四五位算出来,两个答案取大值即可

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'using namespace std;void solve(){int a,b,d,e; cin>>a>>b>>d>>e;int ma = 0;int c = a + b;int ans = 0;if(c == a + b) ans++;if(d == b + c) ans++;if(e == c + d) ans++;ma = max(ans,ma);ans = 0;c = e - d;if(c == a + b) ans++;if(d == b + c) ans++;if(e == c + d) ans++;ma = max(ans,ma);cout<<ma<<endl;
}signed main(){int T; cin>>T; while(T--)solve();return 0;
}

B题

我们可以找到 \(0 \sim n-1\) 对应的牛牛,这就是出牌顺序,接下来 \(n \sim nm-1\) 都按这个牛牛顺序出牌,如果有人没有这张牌就是无解情况,否则直接输出最开始的出牌顺序即可

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'using namespace std;void solve(){int n,m; cin>>n>>m;vector<vector<int>> a(n + 1,vector<int>(m + 1));vector<int> pos(n*m*2);for(int i = 1;i<=n;i++){for(int j = 1;j<=m;j++){cin>>a[i][j];pos[a[i][j]] = i;}}vector<int> ans;for(int i = 0;i<n;i++) ans.push_back(pos[i]);bool flag = true;for(int i = n;i<n*m;i++){if(ans[(i-n)%n] != pos[i]) flag = false;}if(flag){for(int i = 0;i<n;i++) cout<<ans[i]<<" ";} else {cout<<-1;}cout<<endl;
}signed main(){int T; cin>>T; while(T--)solve();return 0;
}

C题

这题实则博弈论没有用,就是找数列中 \(a+b=k\) 的对数,因为无论和等不等 \(k\) 的一对,博弈时 Alice 为了让得分最小选择不能和等 \(k\) 的数时,一定还有另一个数给 Bob 选择,所以不会对最终答案造成贡献,这里注意一下 \(k-a_i=a_i\) 的情况,还有数组越界的问题就行

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'using namespace std;void solve(){int n,k; cin>>n>>k;vector<int> a(n + 1);int ma = 0;for(int i = 1;i<=n;i++){cin>>a[i];ma = max(ma,a[i]);}sort(a.begin() + 1,a.end(),greater<int>());vector<int> cnt(ma+1);for(int i = 1;i<=n;i++) cnt[a[i]]++;int ans = 0;for(int i = 1;i<=n;i++){if(k-a[i] >= 1 && k-a[i] <= ma){if(cnt[a[i]]&&cnt[k-a[i]]){ans++;cnt[a[i]]--;cnt[k-a[i]]--;if(cnt[a[i]]<0){ans--;cnt[a[i]]+=2;}}}}cout<<ans<<endl;
}signed main(){int T; cin>>T; while(T--)solve();return 0;
}

D题

结论猜猜乐,因为两个数同减 min 不会改变相对大小关系,想要单调不减,前面的数就得小,盲猜一个全部操作再is_sorted判断单调给我猜对了

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'using namespace std;void solve(){int n; cin>>n;vector<int> a(n + 1);for(int i = 1;i<=n;i++) cin>>a[i];for(int i = 2;i<=n;i++){int mi = min(a[i],a[i-1]);a[i-1]-=mi;a[i]-=mi;}// for(int i = 1;i<=n;i++) cout<<a[i]<<" ";// cout<<endl;if(is_sorted(a.begin() + 1,a.end())) cout<<"YES"<<endl;else cout<<"NO"<<endl;
}signed main(){int T; cin>>T; while(T--)solve();return 0;
}

E题

两个图联通的节点情况要一致,所以我们使用两个并查集分别维护 \(F\) 图和 \(G\) 图的联通块,先维护 \(G\) 图联通,按 \(G\) 图的联通情况去判断 \(F\) 图的联通情况,如果不一致则答案加一,一致则合并 \(G\) 图,然后按 \(F\) 图的联通情况去判断 \(G\) 图的联通情况,如果不一致则答案加一再合并 \(F\) 图。

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'using namespace std;const int N = 2e5 + 3;int fa1[N],fa2[N];int Find1(int x){if(fa1[x] == x) return x;return fa1[x] = Find1(fa1[x]);
}int Find2(int x){if(fa2[x] == x) return x;return fa2[x] = Find2(fa2[x]);
}void Union1(int x,int y){x = Find1(x); y = Find1(y);if(x == y) return;fa1[y] = x;
}void Union2(int x,int y){x = Find2(x); y = Find2(y);if(x == y) return;fa2[y] = x;
}void solve(){int n,m,k; cin>>n>>m>>k;for(int i = 1;i<=n;i++) fa1[i] = i,fa2[i] = i;vector<int> u1(m + 1),v1(m + 1),u2(k + 1),v2(k + 1);for(int i = 1;i<=m;i++){cin>>u1[i]>>v1[i];}for(int i = 1;i<=k;i++){cin>>u2[i]>>v2[i];Union2(u2[i],v2[i]);}int ans = 0;for(int i = 1;i<=m;i++){if(Find2(u1[i]) != Find2(v1[i])){ans++;} else {Union1(u1[i],v1[i]);}}for(int i = 1;i<=k;i++){if(Find1(u2[i]) != Find1(v2[i])){Union1(u2[i],v2[i]);ans++;}}cout<<ans<<endl;
}signed main(){int T; cin>>T; while(T--)solve();return 0;
}

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

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

相关文章

【clang-format】C++代码风格自用配置文件,大括号换行风格

使用方法: 新建一个文本文件,把下面代码复制进去,再把名字改成.clang-format,然后粘贴到项目文件夹的根目录下即可,效果如下图。当然,IDE需要设置启用clang-format。clang-format文件内容 # LLVM Google BasedOnStyle: Google Language: Cpp# 强制花括号遵循 Allman 风格…

【clang-format】vscodeC++调整代码格式时让public顶格

习惯了leetcode里面public顶格写,vscode格式化代码public不顶格看着难受。 如图:只要在.clang-format文件中添加下面这行就行 # 访问修饰符偏移 AccessModifierOffset: -4 # -4就是public顶格如果是用vscode插件配置的: "C_Cpp.clang_format_style": "{Base…

基于反射实现的零GC高效率Unity组件绑定

前言 我是狗猥,上一世,我使用传统方式绑定UI上的组件,却因xLua扩展代码太多撑爆丹田沦为废人,失去了争夺主程岗位的资格,最后在测试同学的讥笑声中饮恨西北。 再次睁开眼,我穿越回到了拼UI的那一天。重生归来,这一世我要设计一个船新的绑定方式,夺回本就属于我的一切!…

XML+propties

txt文件,properties(属性)文件,XMl文件txt与properties与XML的区别当这些文件存储单个关系数据时, 普通文件 无法存储 关系数据,而properties属性文件以键值对形式存储就很方便,XML文件也可以 见图1 但储存多个用户就不行了,XML更适合, 见图2properties集合properties …

一条SQL更新语句是如何执行的?

与查询流程不同的是,更新流程中会涉及两个重要的模块: (i)redo_log模块(InnoDB中的日志模块):在 MySQL 里也有这么个问题,如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高。为了解决这个问题,MyS…

大模型分布式训练并行技术(五)-序列并行

p { font-size: 12pt; line-height: 2 !important } 参考资料 大模型分布式训练并行技术(五)-序列并行 详解MegatronLM序列模型并行训练(Sequence Parallel)一、序列并行(Colossal-AI)背景 Colossal-AI 序列并行诞生的背景是 self-attention 的内存需求是输入长度(sequenc…

1.匿名内部类

使用场景不用多创建类,来使用其方法定义 匿名内部类的语法比较奇特,匿名内部类既是一个类的定义,同时他本身也是一个对象, 所以子类继承抽象类, 实现类实现接口,需要节省内存不创建类,从而创建匿名内部类 例子使用当你的才华配不上你的野心,努力的时候到了!

Arrays 排序

正常来说 Arrays可以用于数组排序, 但如果数组里面是引用类型地址就会报错,这时候, 就需要加个功能(实现接口/继承接口) Comparable接口来定引用类型对象的排序规则(以..属性值进行排序)正常Arrays.sort( 数组对象)进行排序时 , 会在排序的时候将数组对象进行调用comparato方…

Spring Boot 自动配置原理详解

引言 Spring Boot 的一大亮点是它能够自动配置(Auto-Configuration)Spring应用程序,极大地简化了Spring应用的创建过程。开发者只需添加所需的依赖,Spring Boot就会根据这些依赖和一些预设条件自动装配相应的组件,从而减少了大量样板代码的编写。 第三方组件的集成方式 对…

传奇

毋庸置疑,很多人的心里,都有一个传奇、传奇3,80后、90后,甚至70后尤甚。当然也包括我。主要当然因我曾经是盛大游戏传奇工作室研发团队的一员,且是盛大传奇3项目部的第一个程序技术人员,内心对传奇、传奇3的感情非同一般。因工作等原因,我早已不再从事传奇类游戏的开发研…

常用工具

类似gdb的bash调试工具bashdb: https://sourceforge.net/projects/bashdb/files/bashdb/ 非常好用,结合vscode bashdb(bash debug) shift + command + d,配置 .vscode/launch.json

《CPython Internals》阅读笔记:p232-p249

《CPython Internals》学习第 13天,p232-p249 总结,总计 18 页。 一、技术总结 无。 二、英语总结(生词:1) 1.overhead (1)overhead: over-("above") + head(“top part, uppermost section”) overhead的字面意思是:above the head,后来演变成"represent …