CODEFORCE 1002 DIV2讲解

news/2025/2/4 19:39:40/文章来源:https://www.cnblogs.com/fufufuf/p/18698334

这里就讲一下前面三道题的做法,因为今天只不到了前面三题,有时候觉得自己的效率好难绷,不过放假了,还是要以休息为主。

首先是第一道题,比赛刚开始,看到这道题感觉有一点懵,它先是说有两个good的数列,这两个数列,有一个条件说满足这两个条件他才可以被称为good,但是在后面,题目又说要将这些数字给重新组合,使得新数组里面至少有三种数字,那么这个条件是什么呢?首先假设数组a,b长度为1,这自然是不行的,若是两个数组长度为2,但是a里面只有1种数字,而b里面只有1种数字,那么这时,新的组合里面最多只会有1种数字;如果a里面有2种数字,b里面有1种数字,那么组合出来也只有2种数字;如果a里面有2种数字,而b里面有2种数字,那么就可以组合出2种数字或者1种数字;但是若是a里面有3种数字,而b里面有1种数字,那么就可以组合出新数组里面有3种数字;所以我们只需要统计a数组和b数组里面有多少种数字就可以了,至于是不是Good不重要。
下面是AC 代码

#include<bits/stdc++.h>
using namespace std;void sol(){int n;scanf("%d",&n);set<int> a,b;for(int i=0;i<n;i++){int a1;scanf("%d",&a1);a.insert(a1);}for(int i=0;i<n;i++){int b1;scanf("%d",&b1);b.insert(b1);}int num1=a.size();int num2=b.size();if(num1+num2<=3){cout<<"No"<<endl;}else{cout<<"Yes"<<endl;}
}int main(){int T;scanf("%d",&T);while(T--){sol();}return 0;
}

在接下来的B题,B题当时做了好久,没有做出来,比赛就结束了。
于是打开了tutorial,这道题的思路是要分两种情况去讨论,首先是第一种情况n=k,这里直接暴力模拟就可以得到答案,而对于n!=k的情况,则是去观察第二段的起始位置,若是第二段的起始位置不是1,那么直接就输出答案是1,但是若是第二段的起始位置是1,那么就去往后面看下一个1出现在什么地方。如果第二个数组在接下来的情况下又出现了1,那么此时这里的答案就是2,所以说在这里只有1和2两种情况。
下面是AC代码。

#include<bits/stdc++.h>
using namespace std;void sol(){int n,k;scanf("%d %d",&n,&k);vector<int> a;for(int i=0;i<n;i++){int num;scanf("%d",&num);a.push_back(num);}if(k==n){for(int i=1;i<n;i+=2){if(a[i]!=((i+1)/2)){cout<<(i+1)/2<<endl;return;}}cout<<k/2+1<<endl;}else{for(int i=1;i<n-k+2;i++){if(a[i]!=1){cout<<1<<endl;return;}}cout<<2<<endl;}
}
int main(){int T;scanf("%d",&T);while(T--){sol();}return 0;
}

接下来C题,他的思路是这样子的,若是要让MEX最大,我们就要是最后的数组尽可能是[0,1,2,......]这样子的,而对于清空操作,其实意味着每一行剩下的是他某位置的后缀和,而每一次由于只可以清空一个行,所以意味着每行索取的后缀和是不同的,在这里0一定会出现,因为最后一次清楚就会产生0。那么如果清空后出现1,又是什么情况因为题目说了a[i][j]>=1。所以在这里出现1只能是在第n为出现1.那么对于n-1,n-2,n-3这些位置,怎么才可以出现2的后缀和,由于n位置出现1才可以为1,所以出现2的后缀和只可以是在n-1的位置出现1才可以,以此类推,n-1,n-2,n-3分别都是1才有可能出现(1位置为数组起点)。那么在这里我只要去统计一下每一行出现1的数量,这个作为xi加入到数组里面,然后判断第一个没有出现的数字就可以了。
下面是AC的代码。

#include <bits/stdc++.h>
using namespace std;const int N=305;int a[N][N],suff[N];void solve(){int n;cin>>n;for(int i=1;i<=n;i++){suff[i]=0;for(int j=1;j<=n;j++){cin>>a[i][j];}}for(int i=1;i<=n;i++){for(int j=n;j>=1;j--){if(a[i][j]!=1){break;}suff[i]++;}}set<int> suff2;for(int i=1;i<=n;i++){suff2.insert(suff[i]);}vector<int> suff3;for(auto it=suff2.begin();it!=suff2.end();it++){suff3.push_back(*it);}for(int i=0;i<=suff3.size();i++){if(suff3[i]!=i){cout<<i<<endl;break;}}
}int main(){ios_base::sync_with_stdio(0);cin.tie(0);int t;cin>>t;while(t--){solve();}return 0;
}

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

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

相关文章

直流有刷电机.

一、基础知识回顾 1.1 电路定律 1.1.1 基尔霍夫电流定律 在集总参数电路中的任一节点处,所有支路电流的代数和在任何时刻恒等于零,即\(\sum i=0\)。 对于正弦稳态交流电路,其相量形式为\(\sum {\dot I}=0\)。 其中,当支路电路的参考方向为流入、流出节点时,支路电流分别取…

用C# GDI编写粒子效果

C#语言能不能画一动画呢?闲来无事,特过一把编程瘾。一共写了6个例子特效动画,界面如下,程序在文末供下载。拿一个粒子效果“鼓泡泡效果”的类讲解,其他类似:using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; usi…

你说得对,但是我怎么没学过后缀科技啊???

后缀数组 (SA) 后缀数组(SA,Suffix Array)最基础的应用是,可以将给定串 \(S\) 的所有后缀串排序。 一点定义:\(sa_i\) 表示第 \(i\) 小的后缀的编号,\(rk_i\) 表示后缀 \([i,n]\) 的排名。显然 \(sa_{rk[i]}=rk_{sa[i]}=i\)。 后缀数组就是 \(sa\) 数组,我们可以利用后缀…

2025.2.4 鲜花

交通网络 题解?hzoi898 交通网络 题解?Underground 是那个纯音乐啦~Ans 注意到:一个只能说真话,一个绝不说假话。这题有四样读法,你知道么?出一个毒瘤 ds 的最好方式就是把序列问题直接出到树上,考察选手树剖能力。正确的题意:给定一棵树,在时刻 \([tl, tr]\) 链加,查…

云手机和模拟器究竟有什么区别?一分钟带你理清楚

云手机和模拟器究竟有什么区别?一分钟带你理清楚概念 云手机:是在云端运行的虚拟手机,基于云计算技术和端云一体虚拟化技术,通过云服务器实现云服务。具备真实的ARM硬件,和真实手机的架构几乎一样,用户通过网络连接,在不同终端设备上远程操作,可轻松安装、管理APP。 模…

函数笔记

想了很久还是来更这个了。 0x00 一次函数 一般式 \(y=kx+b\),特殊的,当 \(b=0\),称作正比例函数。 图象 一次函数的图像是过\(\left(0,b\right)\)、\(\left( -\dfrac{b}{k},0\right)\)的直线。 而正比例函数的图像则是过原点的一条直线。 根据参数的符号,我们可以确定图象…

java基础(中)

java基础 Scanner对象Scanner类是用于获取用户输入的import java.util.Scanner;public class Hello {public static void main(String[] args){// 创建一个scanner对象来接收键盘数据Scanner scanner = new Scanner(System.in);System.out.println("Enter your name: &qu…

java基础1

java基础2 Scanner对象Scanner类是用于获取用户输入的import java.util.Scanner;public class Hello {public static void main(String[] args){// 创建一个scanner对象来接收键盘数据Scanner scanner = new Scanner(System.in);System.out.println("Enter your name: &q…

PCIe扫盲——TLP Header详解(三)

Completions Completions的TLP Header的格式如下图所示:这里来解释一下Completion Status Codes000b (SC) Successful Completion:表示请求(Request)被正确的处理; 001b (UR) Unsupported Request:表示请求是非法的或者不能被Completer所识别的。在PCIe V1.1以及之后的版…

03-requests库和session

接口测试经常会用到抓包工具,用来抓取接口测试中发送的HTTP请求信息和接收的响应信息。然后查看里面的具体内容。 fiddler是一款常用的HTTP抓包工具,抓包原理是代理式抓包。 Filters设置过滤项Inspectors查看请求消息和响应消息,点击Raw查看原始的请求消息和响应消息 首先客…

探索Java动态代理的奥秘:JDK vs CGLIB

动态代理是一种在 运行时动态生成代理类的技术,无需手动编写代理类代码。它通过拦截目标方法的调用,实现对核心逻辑的 无侵入式增强(如日志、事务、权限控制等)。一、关于动态代理 1.1 简介 动态代理是一种在 运行时动态生成代理类 的技术,无需手动编写代理类代码。它通过…

Esp32s3(立创实战派)移植LVGL

Esp32s3(立创实战派)移植LVGL 移植: 使用软件EEZ studio 创建工程选择带EEZ Flow的,可以使用该软件更便捷的功能根据屏幕像素调整画布为320*240复制ui文件至工程 将生成的ui文件夹复制到main文件夹同级目录(ui文件夹在工程文件src中) 工程结构:修改声明头文件路径 首先将u…