Codeforces Round 1040 (Div. 2)(补题)

文章目录

  • 前言
  • A.Submission is All You Need
  • B. Pathless
  • C.Double Perspective
  • D.Stay or Mirror

前言

又被卡在第二题了,当时脑子跟犯糊涂似的,B题越理越乱,导致比赛结束,还在想着题,彻夜难眠!


A.Submission is All You Need

Submission is All You Need
题目大意:
在这里插入图片描述
操作:
在这里插入图片描述
思路:只需要统计0的个数就行了,有多少个0就加上多少个1
由于mex的特性,以及操作时的特点,只要把0变成1就行,
代码:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define ll long long
#define endl '\n'
#define fi first
#define se second 
#define pii pair<ll,ll>
const ll N=1e6+10;
ll s[N];
ll sum[N];
void slove()
{ll n;cin>>n;ll f=0;for(ll i=1;i<=n;i++){cin>>s[i];sum[i]=s[i]+sum[i-1];if(s[i]==0)f++;}cout<<sum[n]+f<<endl;
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)slove();return 0;
}

B. Pathless

Pathless
在这里插入图片描述
思路;
对于这一题是有规律的
如果a1,a2,…,an的和sum
1.如果sum>s;
则一定不会满足条件,这时只需要按原数组输出就行
2.sum==s
这种是一定会满足的直接输出-1;
3.s>sum
如果s-sum=1,可以通过先0后2再1的顺序输出
这样可以使得往返之后的额外增加的数,不管如何都不会凑成1
如果大于1,这一种不管如何排列,总会找到相邻的数进行往返,以此来凑齐多出的数
因为相邻数对的和可以通过线性组合覆盖所有大于1的数
代码:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define ll long long
#define endl '\n'
#define fi first
#define se second 
#define pii pair<ll,ll>
const ll N=1e6+10;
ll s1[N];
void slove()
{ll n,s;cin>>n>>s;ll sum=0;ll a1=0,b1=0,c1=0;for(ll i=1;i<=n;i++){cin>>s1[i];if(s1[i]==0)a1++;else if(s1[i]==1)b1++;elsec1++;sum+=s1[i];}if(sum>s){for(ll i=1;i<=n;i++)cout<<s1[i]<<" ";cout<<endl;}else{if(sum==s){cout<<-1<<endl;}else{s=s-sum;if(s==1){for(ll i=1;i<=a1;i++)cout<<0<<" ";for(ll i=1;i<=c1;i++)cout<<2<<" ";for(ll i=1;i<=b1;i++)cout<<1<<" ";cout<<endl;return ;}cout<<-1<<endl;}}
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)slove();return 0;
}

C.Double Perspective

Double Perspective
在这里插入图片描述
其中主要的意思就是
f(s)代表的是在数轴上两点之间距离之和
就比如(1,2)(2, 3)(3,4)其f(s)就是3;
而g(s)
则代表的是成环的长度,此时ai与bi是一条无向边
就比如(1,2)(2,4)(1,4)此时成环,即g(s)=3;
了解完这些之后就是然后找到f(s)-g(s)的最大值
其实很简单,只需要把成环的边去掉,则剩下的集合就是最大的
代码:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define ll long long
#define endl '\n'
#define pii pair<ll,ll>
#define fi first
#define se second
const ll N=1e6+10;
ll k;
ll s[N];
ll h[N];
void in()//初始化
{for(ll i=1;i<=2*k;i++){s[i]=i;h[i]=0;}
}
ll find(ll x)//查找根节点
{ll r=x;while(r!=s[r])r=s[r];ll i=x,j;while(i!=j){j=s[i];s[i]=r;i=j;}return r;
}
void mset(ll l,ll r)//合并
{l=find(l);r=find(r);if(l==r)return ;if(h[l]<h[r]){s[l]=r;}else{if(h[l]==h[r])h[r]++;s[r]=l;}return ;
}
void slove()
{cin>>k;in();vector<ll> p;for(ll i=1;i<=k;i++){ll l,r;cin>>l>>r;l=find(l);r=find(r);if(l!=r)//如果不成环,相当于把成环的跳过了{mset(l,r);p.push_back(i);}}cout<<p.size()<<endl;for(auto i:p)cout<<i<<" ";cout<<endl;
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)slove();return 0;
}

D.Stay or Mirror

Stay or Mirror
在这里插入图片描述
题目的意思就是寻找逆序对的,就是这个条件在这里插入图片描述
通过这个操作
在这里插入图片描述能否使逆序对最小化。
注意:
在这里插入图片描述

当然这一题利用的贪心策略:
对于每个元素 p [i],计算两种选择(保留原值或选择 2n-p [i])分别会产生的逆序数贡献,然后选择贡献较小的那个
对于数组中的每个元素 p [i],代码计算两个值:
l:在 p [i] 之前(j < i)且比 p [i] 大的元素数量
r:在 p [i] 之后(j > i)且比 p [i] 大的元素数量
为什么这样计算?
当选择保留 p [i] 时,它会与前面所有比它大的元素形成逆序对,贡献为 L
当选择 2n-p [i] 时,由于 2n-p [i] 的值较大(对于排列中的元素),它不会与前面的元素形成逆序对,而是会与后面比它小的元素形成逆序对。而后面比 p [i] 大的元素数量 R,恰好等于后面比 2n-p [i] 小的元素数量(因为 2n-p [i] 较大)
因此,对于每个元素,取 min (L, R) 作为它对总逆序数的最小贡献,累加后得到最终结果。
代码:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define ll long long
#define endl '\n'
#define pii pair<ll,ll>
#define fi first
#define se second
const ll N=1e4+10;
ll s[N];
void slove()
{ll n;cin>>n;for(ll i=1;i<=n;i++){cin>>s[i];}ll ans=0;for(ll i=1;i<=n;i++){ll l=0,r=0;for(ll j=1;j<=i;j++)//保留是s[i];if(s[j]>s[i])l++;for(ll j=i+1;j<=n;j++)//选择2n-s[i];if(s[j]>s[i])r++;ans+=min(l,r);//取其贡献最小的累加到答案}cout<<ans<<endl;
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)slove();return 0;
}

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

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

相关文章

Apifox 7 月更新|通过 AI 命名参数及检测接口规范、在线文档支持自定义 CSS 和 JavaScript、鉴权能力升级

Apifox 新版本上线啦&#xff01; 看看本次版本更新主要涵盖的重点内容&#xff0c;有没有你所关注的功能特性&#xff1a; AI 助力接口设计 通过 AI 为参数命名 支持让 AI 对接口进行规范性检测 在线文档功能增强 在线文档支持自定义 CSS 和 JavaScript 目录支持设置展示…

Node.js以及异步编程

什么是服务器&#xff1f;我们知道客户端通过访问服务器&#xff0c;然后服务器去操作数据库把我们想要的数据拿过来给客户端。比如服务器就是餐厅的服务员&#xff0c;数据库就是厨房&#xff0c;客户端就是我们的顾客。首先我们点菜&#xff0c;服务器告诉厨师做饭&#xff0…

UniApp 实现顶部固定导航栏 Tab 及滚动变色效果

顶部导航栏是一个非常常见的组件&#xff0c;尤其是固定在顶部的 Tab 导航&#xff0c;既能方便用户快速切换内容&#xff0c;又能保持页面结构的清晰。本文将详细介绍如何在 UniApp Vue3 TypeScript 项目中实现一个固定在顶部、且能根据滚动状态改变样式的 Tab 导航栏。效果…

c++泛型编程

C泛型编程 1. 基本概念 1.1 泛型编程&#xff08;Generic Programming&#xff09; 泛型编程是C中一种重要的编程范式&#xff0c;它通过 参数化类型 来实现代码的通用性和复用性。 1.2 模板&#xff08;Templates&#xff09; 模板 是泛型编程的基础&#xff0c;允许编写与数据…

Vue.js + Node.js 开发前后台框架

在 Vue.js + Node.js 开发前后台框架时,推荐采用现代化的技术栈组合和最佳实践。以下是一个高效、可扩展的全栈框架方案: 技术栈推荐 层级 技术选型 说明 前端框架 Vue 3 (Composition API) 最新Vue核心库,推荐使用<script setup>语法 UI组件库 Element Plus / Ant D…

Vision Transformer (ViT) 详解:当Transformer“看见”世界,计算机视觉的范式革命

摘要: 长久以来&#xff0c;卷积神经网络&#xff08;CNN&#xff09;凭借其精心设计的归纳偏置&#xff08;inductive biases&#xff09;&#xff0c;无可争议地统治着计算机视觉领域。然而&#xff0c;一篇名为《An Image is Worth 16x16 Words》的论文彻底改变了这一格局&a…

go goroutine chan 用法

方法1 代码 package mainimport ("fmt""sync""time" )func main() {allChan : make(chan interface{}, 3)var sendWg, recvWg sync.WaitGroup // 分别同步发送和接收// 发送goroutinesendWg.Add(1)go func() {defer sendWg.Done()for i : 0; i &…

Web前端文件上传安全与敏感数据安全处理

一、文件上传安全1. 文件上传时的核心安全检查点文件上传是 Web 应用的高风险功能&#xff0c;需从多维度验证&#xff0c;防止恶意文件上传&#xff08;如木马、病毒&#xff09;或路径攻击&#xff0c;关键检查点包括&#xff1a;MIME 类型验证检查请求头中的 Content-Type&a…

文法中的间接左递归

&#x1f31f; 第一步&#xff1a;理解基本概念✅ 什么是文法&#xff08;Grammar&#xff09;&#xff1f;在编程语言或语法分析中&#xff0c;文法 是一组规则&#xff0c;用来描述一种语言的结构。例如&#xff1a;S → A a A → B b B → S c 这表示&#xff1a;S 可以…

Anthropic:跨越生产效能拐点的AI增长飞轮

资本竞赛中的战略转折点 人工智能领域的竞争已经从理念之争演变为资本、算力与地缘政治影响力的全面较量。Anthropic传闻中的1700亿美元估值&#xff0c;如果成为现实&#xff0c;将标志着前沿AI发展格局的地震式转变。这不仅仅是构建更智能模型的问题&#xff0c;更是为主导下…

【Unity3D实例-功能-移动】小兵移动-通过鼠标点击进行

在Unity的世界里&#xff0c;当你轻点鼠标&#xff0c;角色仿佛被赋予了新的使命&#xff0c;沿着一条无形的轨迹&#xff0c;向着地图上的目标点进发。每一次移动&#xff0c;不仅是简单的位移&#xff0c;更是对未知的探索。这种交互&#xff0c;让玩家与游戏世界紧密相连&am…

从0到1学PHP(十四):PHP 性能优化:打造高效应用

目录一、PHP 性能评估与分析1.1 性能指标体系1.2 性能分析工具使用1.3 性能瓶颈定位方法与流程二、代码层面优化技巧2.1 高效的循环与条件判断写法2.2 函数与类的优化设计2.3 内存管理与垃圾回收机制优化三、缓存策略与实现3.1 数据缓存3.2 页面缓存与部分缓存技术3.3 OPcache …

移动管家手机控车系统硬件安装与软件绑定设置

移动管家手机控车系统硬件安装与软件绑定配合使用&#xff0c;具体设置步骤如下&#xff1a;一、硬件安装准备 ‌加装智能控制主机‌&#xff1a;需在车辆上加装移动管家专用智能控制模块&#xff0c;该模块需与原车电路系统连接&#xff0c;并将原车钥匙芯片焊接至主控盒内以实…

51单片机入门:数码管原理介绍及C代码实现

本文是江协科技up的课堂笔记&#xff01;大家可以去bilibili配合这位up的51单片机入门教程食用&#xff0c;效果更佳~我这里进行详细介绍&#xff0c;希望你忘记数码管的时候来这里看看&#xff01;&#xff08;你猜我为什么写这个TAT&#xff09;一.基本介绍LED数码管&#xf…

Apache Camel 简介

相关文档地址 https://camel.apache.org/components/next/index.htmlhttps://camel.apache.org/components/4.10.x/languages/simple-language.htmlhttps://camel.apache.org/manual/exception-clause.htmlhttps://camel.apache.org/manual/index.htmlhttps://camel.apache.org…

IP离线库 输入IP地址立即返回IP所在地址信息(支持Java、Python)

描述 本文实现&#xff1a; 1、离线查询IP地址 2、IP地址精确到区域 3、IP地址支持国外IP 此时需要一个创建&#xff0c;比如我输入一个8.8.8.8的IP立马就需要返回给我一个中文地址信息&#xff0c; 类似于百度的IP搜索&#xff1a; 113.111.186.123如果现在离线环境或者在…

解决MySQL删除/var/lib/mysql下的所有文件后无法启动的问题

删除 MySQL 数据目录 /var/lib/mysql 下的所有文件后&#xff0c;MySQL 将无法启动&#xff0c;因为该目录包含了数据库的所有数据文件、配置文件和系统表。当这些文件被删除时&#xff0c;MySQL 无法找到必要的数据和配置&#xff0c;从而无法正常启动。本文将详细介绍解决这个…

苍穹外卖项目学习——day1(项目概述、环境搭建)

文章目录一、软件开发整体介绍1.1 软件开发流程1.2 角色分工1.3 软件环境分类二、苍穹外卖项目介绍2.1 定位2.2 功能架构2.3 技术选型三、开发环境搭建3.1 前端环境3.2 后端环境3.3 前后端联调3.4 登录功能优化四、接口文档管理4.1 YApi4.2 Swagger (Knife4j)一、软件开发整体介…

【QT】Qt信号与槽机制详解信号和槽的本质自定义信号和槽带参数的信号和槽

文章目录前言一、信号的本质二、槽的本质三、 信号和槽的使⽤3.1 连接信号和槽四、使用步骤4.1 通过QtCreator⽣成信号槽代码五、 ⾃定义信号和槽5.1 ⽰例1&#xff1a;信号和槽函数初步使用5.2 ⽰例2 两个类使用5.3 示例3 按钮使用触发信号六、 带参数的信号和槽6.1 ⽰例1&…

【OD机试题解法笔记】文件缓存系统

题目描述 请设计一个文件缓存系统&#xff0c;该文件缓存系统可以指定缓存的最大值&#xff08;单位为字节&#xff09;。 文件缓存系统有两种操作&#xff1a; 存储文件&#xff08;put&#xff09;读取文件&#xff08;get&#xff09; 操作命令为&#xff1a; put fileName …