【CodeForces训练记录】Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round)

news/2024/10/6 16:13:52

赛后反思

做红温了,太菜了,每题都需要WA几次才能过,B题看到 MEX 选择性害怕,时间复杂度又算错了

A题

每次选择一对 \(a_i,a_j\) 把均值插入数组最后面,要想结果最大,对于两个数求均值,最后的结果一定是小于等于其中的较大值,我们可以考虑如何最大化最后一次操作,想到将最大值保留在最后再使用,这样的答案是最优的,所以我们对数组进行排序,操作 \(n-1\) 次即可

#include <bits/stdc++.h>
#define int long longusing namespace std;void solve(){int n; cin>>n;vector<int> a;for(int i = 0;i<n;i++){int x; cin>>x;a.push_back(x);}sort(a.begin(),a.end());for(int i = 1;i<n;i++){a.push_back((a[0]+a[1])/2);a.erase(a.begin());a.erase(a.begin());sort(a.begin(),a.end());}cout<<a[0]<<endl;
}signed main(){int T; cin>>T; while(T--)solve();return 0;
}

B题

求最大的 MEX,我们显然只需要考虑值域小于等于 \(n\)\(a_i\) 即可,因为 MEX 需要 \({0,1,2,3,4,5}\) 这样连续的 \({a_i}\) 才行,所以最后的答案一定是 \(\le n\) 的,接下来就是考虑什么时候该对 \(a_i + x\),如果我们找到了连续 \(a_i\) 中有空缺的部分,例如 \({2,3,4,6,7}\) 中间少了 \(5\) ,这时我们就需要从 \(\le 5\) 中找到多次出现的数字 \(a_i\),将其加上 \(k\) 倍的 \(x\),但是对于有些 \(a_i + kx\) 可能出现不等于这个数的情况,这时我们就要维护 \(a_i \mod x\) 的出现次数,我们循环遍历 \(0 \sim n\) ,同时维护一个 \(i \mod x\) 的值,即数字 \(i\) 的出现次数 \(- 1\)(因为还要保留至少一个 \(i\),所以是 \(-1\)),发现空缺的部分(即出现次数为 \(0\))的情况,判断当前 \(i \mod x\) 是否还能加上来,如果不行 MEX 就是 \(i\) 了,可以的话继续遍历下去。

#include <bits/stdc++.h>
#define int long longusing namespace std;void solve(){map<int,int> cnt;map<int,int> add;int n,x; cin>>n>>x;vector<int> a(n + 1);for(int i = 1;i<=n;i++) cin>>a[i],cnt[a[i]]++;sort(a.begin() + 1,a.end());for(int i = 0;i<=n;i++){if(cnt[i]>1) add[i%x] += cnt[i]-1;if(!cnt[i]&&add[i%x]){cnt[i]++;add[i%x]--;continue;}}for(int i = 0;i<=n;i++){if(!cnt[i]){cout<<i<<endl;break;}}
}signed main(){int T; cin>>T; while(T--)solve();return 0;
}

C题

我们发现一旦一个人演示完成后,顺序可以随便改变,所以我们遍历 \({b_i}\) ,如果当前演示的人和要求的匹配的话,就往下,同时标记这个人的顺序可以改变,若出现了之前已经演示过的人就可以直接跳过了。

#include <bits/stdc++.h>
#define int long longusing namespace std;void solve(){int n,m,q; cin>>n>>m>>q;map<int,bool> vis;vector<int> a(n + 1);for(int i = 1;i<=n;i++) cin>>a[i];vector<int> b(m + 1);for(int i = 1;i<=m;i++) cin>>b[i];int now = 1;for(int i = 1;i<=m;i++){if(vis[b[i]]) continue;if(b[i] == a[now]) vis[a[now]]=1,now++;else {cout<<"TIDAK"<<endl;return;}}cout<<"YA"<<endl;
}signed main(){int T; cin>>T; while(T--)solve();return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

傻逼模拟赛搬的时候能不能看看题面改之后还是不是让人能看懂还有不发 checker 是有什么心事吗

如题。 傻逼模拟赛搬的时候能不能看看题面改之后还是不是让人能看懂还有不发 checker 是有什么心事吗还在最后一道题放集训队互测什么意思 什么叫有 \(b_{k}\) 种 \(k\) 类型的货币,同一种流通的货币不会超过二十种 什么叫接下来 \(n\) 个数表示 \(a_{1} \sim a_{n-1}\)upd:

Java - 10 二维数据

Java - 10 二维数据 一维数组的每个元素又是一个一维数组 静态初始化 int[][] arr = {{0,0,0,0},{1,1,1,1},{2,2,2,2},{3,3,3,3}};public class TwoDimensionArray {public static void main(String[] args) {int[][] arr = {{0,0,0,0},{1,1,1,1},{2,2,2,2},{3,3,3,3}};// 遍历…

Java - 11 类与对象

Java - 11 类与对象 类 类[属性, 行为] ->对象[属性, 行为] public class Test{public static void main(String[] args){Cat cat1 = new Cat(); // 创建对象cat1.name = "大宝";cat1.age = "3";cat1.color = "orange";System.out.println(ca…

20222413 2024-2025-1 《网络与系统攻防技术》实验一实验报告

1.实验内容 在本周的学习过程中,我了解到了许多缓冲区溢出攻击的实际案例、缓冲区溢出攻击的原理和相关基础知识,包括GDB调试器的使用方法、反汇编、基础的汇编语言与指令等,重新温习了函数调用过程和进程管理方面的知识内容。并且通过实验一,我能够了解并熟练完成Linux系统…

函数的上下文

函数的上下文 概述 在函数体的语句中,会出现this这个词,this就是函数的上下文 函数中this是谁,就说明函数的上下文是谁 函数中的this是谁,要看是如何调用的,因为this不是一成不变的 比如我们看下面的例子 var obj = {a: 100,fun: function() {console.log(this.a);} };我们…

拥挤聚集智能监测系统

拥挤聚集智能监测系统可以通过对人员数量、密度等进行实时监测,拥挤聚集智能监测系统识别出拥挤聚集的情况,并及时发出预警。拥挤聚集智能监测系统可以通过对人员进车间的人数等进行监测,识别出是否存在人员拥堵、挤压等安全隐患,及时发出警报,提醒工作人员采取措施疏散人…

睡岗识别 AI助力企业安全管控

睡岗识别可以通过AI视频智能分析技术,睡岗识别识别出操作人员是否存在睡岗情况。例如,在变电站等场景中,睡岗识别技术可以通过对识别出操作人员是否存在睡岗情况,及时发出预警,避免因操作人员的疏忽而导致的安全事故。在工厂车间中,睡岗识别技术可以通过对工人的行为进行…

加油站安全风险监测预警系统

加油站安全风险监测预警系统可以通过对加油站设备、环境、人员等方面进行监测,加油站安全风险监测预警系统实现对加油站的全面监管。例如,在加油站油罐区中,加油站安全风险监测预警系统可以对加油站人员抽烟打电话、明火烟雾等环境安全隐患进行自动识别,及时发出预警,避免…