Codeforces Round #792 (Div. 1 + Div. 2)

news2025/1/11 20:43:00

比赛链接:Dashboard - Codeforces Round #792 (Div. 1 + Div. 2) - Codeforces

A: 思维

题意:Alice和Bob在玩游戏,每次等Alice交换两个不同位置的数后,Bob就会删除最后一个位置上的数,当最终只剩下一个数后,游戏结束。保证使这个数最小,问最小是多少?

分析:

特判一下。如果数的长度为2,那么Alice必须交换一次,Bob才能删除。所以ans就是第二个数。

一般情况:无论怎么操作,Alice是一定可以把最小值放在最前面。

代码:

#include<bits/stdc++.h>
#define all(v) v.begin(),v.end()
#define int long long
#define fast ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define pi acos(-1)
using namespace std;
const int INF=0x3f3f3f3f;
const int N=2e7+10;
typedef pair<int,int>PII;

inline void solve(){
	string s;cin>>s;
	if(s.size()==2){
		cout<<s[1]<<"\n";return;
	}
	int minn=INF;
	for(int i=0;i<s.size();i++){
		minn=min(minn,(int)s[i]-'0');
	}
	cout<<minn<<"\n";
}

signed main(){
	fast;
	int T;cin>>T;
	while(T--) solve();
}

 B:构造

题意:给定三个数a,b,c。使其满足题中的三个条件的x,y,z。任意输出x,y,z

分析:前置芝士:a<b, a % b= a

所以我们可以显然构造出:x=a+b+c,y=b+c,z=c。

代码:

#include<bits/stdc++.h>
#define all(v) v.begin(),v.end()
#define int long long
#define fast ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define pi acos(-1)
using namespace std;
const int INF=0x3f3f3f3f;
const int N=2e7+10;
typedef pair<int,int>PII;

inline void solve(){
	int a,b,c;cin>>a>>b>>c;
	cout<<a+b+c<<" "<<b+c<<" "<<c<<"\n";
}

signed main(){
	fast;
	int T;cin>>T;
	while(T--) solve();
}

C:模拟+排序

题意:给定一个矩阵,问是否只交换矩阵中的两列(可以是相同的两列),使得矩阵中每行的元素都是非降的。

思路:我们先给每一行进行排序,然后我们将改变后的矩阵跟原矩阵进行对比。找出错位的位置,然后把这两列交换,如果交换后满足条件,就输出这两列,否则就输出-1.

ps:如果错位的个数多于两个,那么不管交换哪两列,都不会满足条件(具体看代码)

代码:

#include<bits/stdc++.h>
#define all(v) v.begin(),v.end()
#define int long long
#define fast ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define pi acos(-1)
using namespace std;
const int INF=0x3f3f3f3f;
const int N=2e7+10;
typedef pair<int,int>PII;
int n,m;

//用于交换矩阵中的两列
inline void Swap(int x,int y,vector<vector<int>>&a){
	for(int i=0;i<n;i++) swap(a[i][x],a[i][y]);
}

inline void solve(){
    cin>>n>>m;
	vector<vector<int>>a(n,vector<int>(m));/*这里做解释一下:这里相当于重新定义了一下二维数组:表示:vector类型的a数组,数组每个值是vector类型,大小是:a(n,vector<int>(m))是指有n行,每行有m个元素*/
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>a[i][j];
		}
	}
	vector<vector<int>>b=a;//用矩阵b复制矩阵a
	set<int>se;
	bool ok=false;
	for(int i=0;i<n;i++){
		sort(all(b[i]));//每行先进行排序
		for(int j=0;j<m;j++){//与矩阵a对比每列的元素
			if(a[i][j]!=b[i][j]) se.insert(j);//错位就放进set
			if(se.size()==2){//等于2就可以终止循环了,因为多于2,还是只能交换一次(题意)
				ok=true; break;
			}
		}
		if(ok) break;//加快循环操作
	}
	if(!ok){//如果没有错位,即:原始矩阵本就满足条件的情况下,随便输出两个相同的列即可
		cout<<"1 1\n";return;
	}
	vector<int>pos;//用vector接受set容器中的值
	for(auto i:se) pos.push_back(i);
	Swap(pos[0],pos[1],a);//交换列
	for(int i=0;i<n;i++){//判断是否满足条件
		for(int j=1;j<m;j++){
			if(a[i][j]<a[i][j-1]){
				cout<<"-1\n";return;
			}
		}
	}
	cout<<pos[0]+1<<" "<<pos[1]+1<<"\n";//为什么+1?因为下标是从0开始的
}	

signed main(){
	fast;
	int T;cin>>T;
	while(T--) solve();
}

 D:贪心

题意:有 n 个陷阱,每个陷阱造成 ai 点伤害,最多跳过 k 个陷阱,但如果选择跳过这个陷阱的话,后面的每个陷阱的伤害都会加 1,问最少伤害是多少 

吐槽:这题相通了很简单,想不通就一愣一愣的。

这里参考的是ygg的题解:

Codeforces Round #792 (Div. 1 + Div. 2) D(贪心) E(贪心) - 知乎

分析:先考虑。最优的方案肯定是把给定的次数给跳完。问题就在于,每跳一个,跳过的位置后面的伤害就会+1。如何跳?

错误方法:直接从后往前面选择k个陷阱跳完——然后就g啦! 

正确方法: 假设我们跳过的第一个陷阱为i,那么对答案的贡献就是a[i](这里的贡献是指,总和减去a[i])。但是后面的伤害都会+1,所以对于单个陷阱i而言,它对答案的贡献为 a[i]+(n-i)。

a[i]+(n-i):跳过点i后会对答案贡献原始的a[i]伤害+(跳完后)后面的(n-i)

跳完第一个陷阱,后面还有k-1个跳过陷阱的机会,所以该点对答案的贡献同理:伤害减少k-1。

k-2:伤害减少k-2。然后我们就可以推出仅跟k相关的减少伤害量: 

根据前面的推理:每个位置对于伤害的贡献为 -a[i]+(n-i)=n-(a[i]+i) 

令v[i]=n-(a[i]+i),然后选择k最小的k个即可。具体看代码:

代码:

#include<bits/stdc++.h>
#define all(v) v.begin(),v.end()
#define int long long
#define fast ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define pi acos(-1)
using namespace std;
const int INF=0x3f3f3f3f;
const int N=2e7+10;
typedef pair<int,int>PII;
int a[N];

inline void solve(){
	int n,k;cin>>n>>k;
	for(int i=1;i<=n;i++) cin>>a[i];
	vector<int>ve;
	for(int i=1;i<=n;i++) ve.push_back(n-(a[i]+i));//放入每个点对答案的贡献
	int ans=accumulate(a+1,a+1+n,0LL);//原始累加和
	sort(all(ve));//将贡献进行排序
	for(int i=0;i<k;i++) ans+=ve[i];//加每一个点对ans的贡献,选择k个点
	k--;//参考k关于答案的贡献   (k-1)
//因为一旦跳过一个点,会影响后面。
	ans-=(k*(1+k)/2);//减去重复点造成的伤害  1~k-1的和
	cout<<ans<<"\n";
}

signed main(){
	fast;
	int T;cin>>T;
	while(T--) solve();
}

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

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

相关文章

基于对抗互信息学习特征解耦的零样本语音转换|INTERSPEECH 2022

零样本语音转换在转换时只需目标说话人的一段语音&#xff0c;更适合实际应用需求&#xff0c;具有广泛应用前景。 现有工作只考虑内容和音色表征的解耦&#xff0c;没有考虑与语音旋律相关的 韵律 和 音高 表征&#xff0c;导致与音高和韵律相关的信息泄露到音色中。 本文利用…

Flutter - Stack 与 Positioned 层叠布局

1 层叠布局和 Web 中的绝对定位、Android 中的 Frame 布局是相似的 2 子组件可以根据距父容器四个角的位置来确定自身的位置。 3 层叠布局允许子组件按照代码中声明的顺序堆叠起来。 4 Flutter中使用Stack和Positioned这两个组件来配合实现绝对定位。 5 Stack允许子组件堆叠&am…

什么是数据为先营销?为什么它对市场部如此重要?

数据为先营销希望能帮助各地的市场人员与高管们建立联系&#xff0c;实现这些商业目标&#xff0c;并真正学会如何适当地跟踪一切数据&#xff0c;这样他们就知道自己是否真的达到了收入目标&#xff0c;ROI&#xff0c;这些商业目标&#xff0c;而不是仅仅说我们是被数据驱动型…

先进的数字隔离技术提高了太阳能逆变器的可靠性

介绍 一个多世纪以来&#xff0c;化石燃料发电设施一直被证明是坚固可靠的能源&#xff0c;但这些久经考验的电力设施规模大、复杂&#xff0c;而且建造成本越来越高。以最小的碳足迹和环境影响清洁地操作它们也具有挑战性和成本高昂。相比之下&#xff0c;现代光伏&#xff0…

CSDN涨粉就这几招

目录说明涨粉不可不知的几件事几个常规的涨粉之道CSDN的数据运营之道粉丝列表关注列表关注某人取消关注获得某个用户的主要信息&#xff1a;昵称、排名、原创数、粉丝数等其它数据有了数据&#xff0c;怎么涨粉&#xff1f;说明 直到今年&#xff0c;我才开始重视涨粉&#xf…

_2LeetCode代码随想录算法训练营第二天C++

_2LeetCode代码随想录算法训练营第二天C LeetCode 题目列表&#xff1a; 977.有序数组的平方209.长度最小的子数组59.螺旋矩阵II 977.有序数组的平方 题目所述数组含有负数。 双指针的思路 双指针的思路&#xff1a; 最大元素一定是在两边&#xff0c;考虑用两个指针逐步…

PHY寄存器解读

以太网PHY寄存器分析 1 1、以太网PHY标准寄存器分析 2 1.1 Control Register 2 1.2 Status register 5 1.3 PHY Identifier Register 8 1.4 Auto-Negotiation Advertisement Register 8 1.5 Auto-Negotiation Link Partner Base Page Ability Register…

NY CREATE和Bleximo宣布达成新量子计算研发合作

&#xff08;图片来源&#xff1a;网络&#xff09; 12月7日&#xff0c;全栈量子计算系统集成公司Bleximo Corp.宣布&#xff1a;计划将其原型设计和营销业务扩展到纽约北部的奥尔巴尼纳米技术综合体(Albany NanoTech Complex)。该公司还将与纽约研究、经济发展、技术、工程和…

llvm编译、自带例子toy、llvm编译报错解决、.lib中搜索指定函数名

hunterzju/llvm-tutorial cs.cmu.edu/academic/class/15745-s14/public/lectures 编译llvm cd /d d:\llvm-home\ git clone gitgitcode.net:pubz/llvm-project.gitcd /d d:\llvm-home\llvm-project\ git status #HEAD detached at llvmorg-11.0.0set PATH%PATH%;D:\Python38\S…

ImmunoChemistry丨艾美捷NIR-FLIVO 690游离染料对照试验说明书

ImmunoChemistry艾美捷ICT近红外&#xff08;NIR&#xff09;-FLIVO示踪剂与无NIR-FLIVO染料对照分析结合使用。无NIR-FLIVO染料控制试验使用无NIR-FRIVO染料检测试剂&#xff08;*Dylight690游离染料&#xff09;。注射时&#xff0c;游离染料对照物和示踪物试剂都会产生荧光信…

Java集合 超详细版+面试题

程序总是根据运行时才知道的某些条件去创建新的对象。在此之前&#xff0c;无法知道所需对象的数量甚至确切类型。为了解决这个普遍的编程问题&#xff0c;需要在任意时刻和任意位置创建任意数量的对象。下面讲详细介绍如何使用标准库中的集合类。 集合框架图 简化图&#xff…

遗传算法求解问题(1)

问题描述 在一个长度为 n 的数组中选择 10 个元素&#xff0c;使得 10个元素的和 与 该元组中元素总和的 1/10 接近 问题约束 数组长度 n&#xff1a;10 < n < 100; 数组中没有重复的数字&#xff0c;所以选择的10个元素中也没有重复的数字 遗传算法原理 请移步我上…

国产第一颗7A的车规级马达驱动芯片TMI8140-Q1

新能源汽车因其电动化和智能化的特性&#xff0c;需要大量的马达驱动、DC/DC、高效率Buck & BuckBoost等车规级芯片&#xff0c;成为名副其实的“芯片大户”&#xff01; 以往制造一辆传统汽车一般需要用到500-600颗左右的芯片&#xff0c;而一台高性能的新能源汽车需要芯…

上传IPA包到App Store​

我们都经历过上传IPA包到App Store时的痛苦&#xff01;&#xff01;&#xff01;​ 第一步&#xff1a;通过Xcode-> Archive&#xff0c;Validate App&#xff0c;成功&#xff01;​ 第二步&#xff1a;通过Xcode-> Archive&#xff0c;Distribute App&#xff0c;成…

从股票市场选择配对的股票:共同趋势模型与套利定价理论

股价取对数之后的序列建模为随机游走。现在把取对数之后的股价当作是由一个随机游走和一个平稳时序组成&#xff1a; 是随机游走部分&#xff0c;是平稳部分。取对数后的股价求差就得到回报。所以在时间的回报表示为&#xff1a; 表示非平稳部分的回报&#xff0c;表示平稳部分…

如何基于运维事件中心通过 logstash 进行日志关键字监控

日常运维过程中&#xff0c;很多场景都需要对日志关键字进行监测&#xff0c;以便第一时间发现应用/业务相关异常&#xff0c;这是一种比较常见的监控需求&#xff0c;所以也有很多方法可以实现关键字告警。对于简单的告警可以通过一些传统的监控工具实现&#xff0c;但对于体量…

从头开始搭建一个SpringBoot项目--SpringSecurity的配置

从头开始搭建一个SpringBoot项目--SpringSecurity的配置前言本文的目标使用到的依赖、Redis配置、通用返回实体类依赖Redis项目里的配置通用返回实体ResultResultCodeResultUtil配置文件配置的目录结构Spring Security的配置信息SecurityConfigWebMVCConfig用到的类及代码自定义…

深入浅出自定义创建spring-boot-starter

深入浅出自定义创建spring-boot-starter https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.developing-auto-configuration 快速入手 第一步&#xff1a;新建模块 第二步&#xff1a;修改依赖 <?xml version"1.0" e…

关键词(三)

关键词一.最冤枉的关键字—sizeof二.“简单”的布尔类型—_Bool一.最冤枉的关键字—sizeof 前面我们说过定义变量是需要空间的&#xff08;声明不需要&#xff09;&#xff0c;同时你需要有类型像int,char…这些不同的类型会在内存中开辟不同大小的空间&#xff0c;而sizeof就可…

Web安全测试工具AppScan简述

01 安全测试的对象 了解常见的Web应用安全漏洞&#xff0c;参考OWASP Top 10 2017。 理解这些常见漏洞的攻击原理&#xff0c;如何判断系统是否存在这些漏洞、如何防止这些漏洞。 02 安全测试的实施 SQL注入测试 确认所有的解释器都明确的将不可信数据从命令语句或者查询语…