CF 977 Review

news/2024/10/6 17:40:57/文章来源:https://www.cnblogs.com/Hanggoash/p/18449226

CF 977 Review

掉大分了,我去,绿名也是可以掉分的,我去你简直太牛了sgh。

我是真正的飞舞。

A

排序以后贪心或者直接优先队列模拟即可,都可以过。

Code

#include<bits/stdc++.h>
using namespace std;
template<typename T>inline void re(T &x)
{x=0;int f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}x*=f;
} 
template<typename T>inline void wr(T x)
{if(x<0)putchar('-'),x=-x;if(x>9)wr(x/10);putchar(x%10^48);
}
int n,m,k;
int main()
{int T;re(T);priority_queue<int,vector<int>,greater<int>> q;while(T--){re(n);int tmp;for(register int i=1;i<=n;++i)re(tmp),q.push(tmp);for(register int i=1;i<=n-1;++i){int x=q.top();q.pop();int y=q.top();q.pop();q.push((x+y)/2);}wr(q.top()),putchar('\n');q.pop();}return 0;
}

B

分析

给定一个序列 \({a_n}\)\(x>0\) ,可以任意次数的将序列中的任意一个数加上 \(x\) ,求在最优操作下序列 mex 的最大值。

需要明确的是我们一定是要尽可能地让较小的数都能够存在。

因为只能执行加的操作 ,所以达成这一目的一定是要把 多余的 并且 更小的 数进行操作得到的。

那么我们只需要把序列sort一遍然后模拟即可,注意一遍模拟一遍检查是否出现答案,还要记录当前数字的个数。

复杂度 \(O(n\log n)\) 可以通过。

Code

#include<bits/stdc++.h>
using namespace std;
template<typename T>inline void re(T &x)
{x=0;int f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}x*=f;
} 
template<typename T>inline void wr(T x)
{if(x<0)putchar('-'),x=-x;if(x>9)wr(x/10);putchar(x%10^48);
}
int n,x;
int a[200010]; 
int main()
{int T;re(T);while(T--){set<int> s;unordered_map<int,int> CNT;re(n),re(x);for(register int i=1;i<=n;++i)re(a[i]);sort(a+1,a+n+1);int cnt=1;a[n+1]=-1;for(register int i=1;i<=n;++i){if(a[i]==a[i+1])cnt++;else {s.insert(a[i]);CNT[a[i]]=cnt;cnt=1;}}int las=-1;for(auto it:s){if(it-las>=2){wr(las+1),putchar('\n');goto A;}if(CNT[it]>1){if(!s.count(it+x))s.insert(it+x); CNT[it+x]+=CNT[it]-1;}las=it;}wr(las+1),putchar('\n');A:continue;}return 0;
}
/*
1
6 1
1 3 4 1 0 2
*/

C(easy)

题意不多赘述,因为太难赘述了。

分析

先看一组样例 :

a:1 2 3 4b:1 2 3 4   2 3 4 1   2 3 1 4

你会发现只要前四个能够匹配上,好像后面一定能够满足。

那如果我后面八个再写杂乱无章一点,比如 2 1 3 2 1 4 1 2 ,会发现无论怎么写都一定能够满足。

那如果我再写的极限一点:

a:1 2 3 4b:1 2 3     2 3 4 1  2 3 1 4

这下好像仍然可以,但前四个就不一定一样了。

看看样例里面不合法的一个情况呢?

a:3 1 4 2 5
b:3 1 4 5 2 3 4

这下前三个相同,但是又不合法了,说明和前几位相同实际上没有什么必要的关系。

多举几组反例会发现,b 里面的数字必须按照 a 中的顺序出现,言下之意,当 \(a_i\) 没有第一次出现的时候,\(a_{i+1}\) 就不能先出现,因为此时就不可以通过操作使 \(a_{i+1}\) 出现在 \(a_i\) 前面。

根据以上分析,我们只需要记录每个 \(a_i\) 第一次出现的位置即可。或者说直接按位匹配,不合法就直接输出。

(写的时候差临门一脚了,还是自己太笨了,脑子转的不够快)

#include<bits/stdc++.h>
using namespace std;
template<typename T>inline void re(T &x)
{x=0;int f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}x*=f;
} 
template<typename T>inline void wr(T x)
{if(x<0)putchar('-'),x=-x;if(x>9)wr(x/10);putchar(x%10^48);
}
int n,m,q;
const int N=2e5+10;
int a[N],b[N],c[N];
inline void solve()
{re(n),re(m),re(q);for(register int i=1;i<=n;++i)re(a[i]);for(register int i=1;i<=m;++i)re(b[i]);int cnt=0;b[m+1]=0;for(register int i=1;i<=m;++i){if(b[i]==b[i+1])continue;c[++cnt]=b[i];}vector<int> vis(n+10,0);for(register int i=1,p=1;i<=cnt;++i){if(c[i]==a[p])vis[a[p++]]=1;else if(!vis[c[i]]){puts("TIDAK");return ;}}puts("YA");
}
int main()
{int T;re(T);while(T--)solve();return 0;
}

(去重并不是必要的)

C(hard)

挖个坑

D

这个太难了暂时不补了

E

挖个坑

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

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

相关文章

VC++ 6.0的安装及使用

1. 安装 双击运行程序vc6_cn_full.exe进行安装如果需要更改安装目录,选择浏览进行安装地址的修改,否则点击下一步程序第一次启动会弹出提示框,可去掉“启动时显示提示”选项框,下一次就不会弹出该提示框2. 一个简单的demo初学者建议选择“一个空程序”去创建控制台程序选择…

2024-2025 1 20241306第二周作业总结

学期2024-2025-1 学号:20241306 《计算机基础与程序设计》第2周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第2周作业)这个作业的目标 学…

网红狗头来深圳了,上图上图

在海雅缤纷城,晚上7点开摆摊,9点结束,10月7日结束。昨天带了变焦xf18-120mm镜头。和75mm1.2f

2024-2025-1 20241407《计算机基础与程序设计》第二周学习总结

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 [2024-2025-1计算机基础与程序设计第二周作业](https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13266)这个作业的目标 数字化 信息安全 *自学教材:计算机科学概论(第七版)第1章…

F5负载均衡系列教程十一【流量负载不均的潜在原因】

F5作为负载均衡设备,主要目的是将流量相对均衡的分发到每台服务器上(如果服务器性能相同),但是某些情况下也可能会产生负载不均的情况,导致负载不均可能的原因主要如下图所示

Visual Studio 2015 社区版安装

下载安装包 链接:https://pan.baidu.com/s/1ebHUp-rUy75-03o5edxHcg 提取码:hs0l --来自百度网盘超级会员V1的分享1、双击安装包2、如图先选自定义,然后选安装路径(英文路径)3、3-安装选项一个就够了,如图4、安装完成

怎么清除浏览器缓存?浏览器缓存清理的方法步骤是什么?

打开浏览器,点击右上角的三个点,然后选择设置按钮。 点击“隐私设置和安全性”按钮。 点击“清除浏览数据”。 选择时间范围,点击清除数据即可,这样就可以将浏览器中的浏览记录、Cookie、缓存的图片和文件清除了。 第一步 打开edge浏览器,点击右上角的三个点,选择设置。第…

[网络爬虫] Jsoup : HTML 解析工具

1 概述 简介Jsoup是一款基于Java的HTML解析器,它提供了一种简单、灵活且易于使用的API,用于从URL、文件或字符串中解析HTML文档。它可以帮助开发人员从HTML文档中提取数据、操作DOM元素、处理表单提交等。主要特点Jsoup的主要特点包括:简单易用:Jsoup提供了一系列简单的API…

F5负载均衡系列教程八【负载均衡算法详解】

#参考文档:3https://clouddocs.f5.com/training/community/f5cert/html/class1/modules/module1.html #系统上可以配置的负载均衡算法如下所示F5默认的负载均衡算法是轮询(Round Robin)负载均衡算法描述使用场景轮询(Round Robin)这是默认的负载均衡方法。轮询方法将每个新…

搜索算法合集 - By DijkstraPhoenix

搜索算法合集 By DijkstraPhoenix 深度优先搜索 (DFS) 引入如果现在有一个迷宫,如何走路径最短?方法 走迷宫最简单粗暴的方法式什么呢?当然是把所有路都走一遍啦! 如果是手动计算的话,可能会把你手指累得抽筋,但电脑不会,电脑具有强大的算力,这种暴力的事情当然是交给电…

个人知识面/技能池

虽然走得慢,但是一直在前行 知识面/技能池 电路 模拟电路微弱信号处理信号链设计1Msps采样电路设计滤波器设计无源滤波器有源滤波器光电探测电路设计电力电子逆变电路设计磁耦合谐振式无线电能传输开关电源LED恒流驱动AC/DC 设计基本电路知识电路基础知识复习跟习题册联系现代…

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

赛后反思 做红温了,太菜了,每题都需要WA几次才能过,B题看到 MEX 选择性害怕,时间复杂度又算错了 A题 每次选择一对 \(a_i,a_j\) 把均值插入数组最后面,要想结果最大,对于两个数求均值,最后的结果一定是小于等于其中的较大值,我们可以考虑如何最大化最后一次操作,想到将…