The 2022 ICPC Asia Xian Regional Contest(C/E/F/G/J/L)

news2024/11/24 13:44:09

原题链接:Dashboard - The 2022 ICPC Asia Xian Regional Contest - Codeforces

目录

 J. Strange Sum

 F. Hotel

 C. Clone Ranran

 G. Perfect Word

 E. Find Maximum

 L. Tree 


 J. Strange Sum

题意:思路:当我们选择i=n时,我们则可以选择整个区间,所以我们在这个区间内我们可以分别选择最大的2个元素、最大的1个元素、不选,三者取max即可。

代码:

void solve() {
	int n;
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	sort(a+1,a+n+1);
	cout<<max({0ll,a[n],a[n-1]+a[n]})<<endl;
}

 F. Hotel

题意:

思路:对于每个队伍我们进行分治,当队伍中的队员性别都不同的时候,ta们需要住三间房间,总共有两种情况:三人都住单人间,或者三人都住双人间(双人间只住一个人)。当队伍中存在相同性别的队员时,也是只有两种情况:两人一起住双人间,一人住单人间;两人一起住双人间,一人住双人间。每种情况取min然后累加即可。

void solve() {
	int n,a,b,ans=0;
	cin>>n>>a>>b;
	for(int i=1; i<=n; i++) {
		map<char,int>mp;
		int now=min(3*a,3*b);
		cin>>s;
		for(int j=0; j<=2; j++) {
			mp[s[j]]++;
			if(mp[s[j]]==2)now=min(min(now,a+b),2*b);
		}
		ans+=now;
	}
	cout<<ans<<endl;
}

 C. Clone Ranran

 题意:

思路:若要进行克隆操作的话,肯定是克隆完然后再一起答题是最优的。所以我们枚举克隆次数,答案取min即可。每次枚举的答案为克隆次数+(问题数)/(克隆后的数量)<-(向上取整)。因为它的复杂度是log级别的,所以不会超时。 

代码:

void solve() {
	int a,b,c,ans=1e18;
	cin>>a>>b>>c;
	for(int i=0; i<=34; i++) {
		int sum=a*i;
		sum+=b*((c+f[i]-1)/f[i]);
		ans=min(ans,sum);
	}
	cout<<ans<<endl;
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	f[0]=1;
	for(int i=1; i<=34; i++)f[i]=f[i-1]*2;
	int _;
	cin>>_;
	while(_--)
		solve();
}

G. Perfect Word

题意:

思路:若一个单词S满足条件,则它的子串S[1~n-1]和S[2~n]也满足条件,所以我们根据字符串长度从下往上拼出最长的单词,若这个单词S能在比它长度小的set集合中,找到S[1~n-1]和S[2~n]两个字串,说明这个字符合法,放入set,反之continue。答案在模拟的过程中取max即可。

代码:

bool cmp(string a,string b) {
	return a.size()<b.size();
}
void solve() {
	vector<string>v;
	set<string>s;
	int n,ans=0;
	cin>>n;
	for(int i=1; i<=n; i++) {
		string x;
		cin>>x;
		v.push_back(x);
	}
	sort(v.begin(),v.end(),cmp);
	for(int i=0; i<n; i++) {
		string a=v[i],b,x;
		if(a.size()==1)s.insert(a),ans=max(ans,1ll);
		else {
			x=a,b=a.substr(1),a.pop_back();
			if(s.count(a)&&s.count(b)) s.insert(x),ans=max(ans,(int)x.size());
		}
	}
	cout<<ans<<endl;
}

 E. Find Maximum

题意: 

思路: 手玩函数(bushi)后可得f(x)表达的是x在三进制下各个位的数之和+三进制长度,所以2是越多越好,我们可以用右边界r来进行贪心。因为已经r是上限了,所以不可能令它三进制的某一位增加,我们对r能进行的操作只有减少它的某一位,然后根据贪心的思想,若它某一位减少了,则该位之后的位都可以变成2,这是因为3^1+3^2+.......+3^(i-1)<3^i,所以就算后面的位都变成2了,也不会超过r的范围,我们需要判的就是变完之后会不会小于l。

总结一下,就是枚举r在三进制上的每一位,然后该位-1,后面的位都变成2,再判断它是否大于l,若合法则答案取min。别忘了把答案的初始值设为f(r)。

代码:

int f(vector<int>v) {//用来计算三进制转换为10进制后的值 
	reverse(v.begin(),v.end());
	int sum=0,now=1; 
	for(auto x:v) {
		sum+=x*now;
		now*=3;
	}
	return sum;
}
int f2(vector<int>v) {//用来计算f(x) 
	reverse(v.begin(),v.end());
	while(v.size()&&!v.back())v.pop_back();
	int sum=0;
	for(auto x:v)sum+=(x+1);
	return sum;
}
void solve() {
	vector<int>a;
	int l,r,rr,ans=0;
	cin>>l>>r;
	rr=r;
	while(rr) {
		a.push_back(rr%3),ans+=(rr%3+1);
		rr/=3;
	}//将r转换为三进制存入vector,并且使ans的初始值为f(r) 
	reverse(a.begin(),a.end());
	for(int i=0; i<a.size(); i++) {
		if(!a[i])continue;//若该位为0则无法-1,要到下一位贪心 
		vector<int>x;
		x=a,x[i]--;
		for(int j=i+1; j<x.size(); j++)x[j]=2;//将后面的位全变为2 
		if(f(x)>=l)ans=max(ans,f2(x));//判断是否合法 
	}
	cout<<ans<<endl;
}

L. Tree 

 题意:

思路:条件一可以转化为在树内删一条链,条件二可以转化为在树内删叶子节点,所以我们先跑一遍dfs预处理后,枚举删的叶子节点层数,答案取min即可。具体实现见代码注释。 

代码: 

vector<int>e[maxn];
int dep[maxn],dis[maxn],cnt=0;
//dep[i]表示的是i节点到最深叶子节点的距离
//dis[i]表示的是有多少个节点到叶子节点的距离为i
void dfs(int u) {
	dep[u]=1;
	for(auto x:e[u]) {
		dfs(x);
		dep[u]=max(dep[u],dep[x]+1);
	}
	dis[dep[u]]++;
}
void solve() {
	int n;
	cin>>n;
	for(int i=1; i<=n; i++) e[i].clear(),dis[i]=0;
	for(int i=2; i<=n; i++) {
		int x;
		cin>>x;
		e[x].push_back(i);
	}
	dfs(1);
	int ans=dep[1];//初始情况是什么叶子都不删的情况,也就是根节点到叶子节点的距离
	for(int i=1; i<=dep[1]; i++)ans=min(ans,dis[i]+i-1);
	//i表示删了(i-1)层叶子节点,那么剩下的链的个数就是dis[i]
	cout<<ans<<endl;
}

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

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

相关文章

Django_获取api接口的传参

目录 当参数为form-data 或者x-www-form-urlencoded类型时&#xff0c;使用request.POST获取到参数 当参数为raw类型时&#xff0c;使用request.body获取到参数&#xff0c;获取的参数需要经过处理才能使用 源码等资料获取方法 当参数为form-data 或者x-www-form-urlencoded…

UE4 关闭steamvr自启动

在我们打开项目时&#xff0c;如果安装过steamvr会自动启动&#xff0c;因为steamvr插件是默认启用的&#xff0c;所以把引擎目录下的steamvr插件默认启动改为false就可以了 用记事本打开SteamVR.uplugin文件 把true改成false

Redshift有哪些硬件要求?不同项目的电脑配置推荐

当谈到使用 Redshift 这样的软件时&#xff0c;项目类型有很多种——从简单的低多边形资产到大片的整个城市景观。很难推荐一种适合所有需求的硬件配置。 因此&#xff0c;我们将介绍 Redshift 的一些常见项目类型&#xff0c;为每个特定项目级别提供硬件建议。通过将硬件与您的…

互联网医院平台定制|互联网医疗平台开发

互联网医院系统是指通过互联网技术与医疗服务相结合的一种新型医疗模式。相比传统医院&#xff0c;互联网医院系统具有许多功能优势&#xff0c;为患者和医生提供了更便捷、高效的医疗服务。以下是互联网医院系统的一些功能优势&#xff1a;   在线挂号与预约&#xff1a;互联…

Tomcat关闭日志输出

一般在部署Tomcat后&#xff0c;运行久了&#xff0c;catalina.out文件会越来越大&#xff0c;对系统的稳定造成了一定的影响。可通过修改conf/logging.properties日志配置文件来屏蔽掉这部分的日志信息。那么Tomcat怎么关闭日志输出 一、 linux 系统 1、直接修改catalina.sh…

虚拟化容器化与docker

虚拟化容器化与docker 基本概念虚拟化分类虚拟化实现主机虚拟化实现容器虚拟化实现命名空间namespace空间隔离 控制组群cgroup资源隔离 LXC(Linux Container) docker与虚拟机 基本概念 物理机&#xff1a; 实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理…

Linux基础(一)Linux基础命令、vi/vim编辑器

目录 虚拟机快照 Linux命令 基础格式 ls命令 cd-pwd命令 创建目录mkdir命令 文件操作命令&#xff1a;touch、cat、more 文件操作命令&#xff1a;cp、mv、rm 查找命令&#xff1a;which、find grep、wc和管道符 echo、tail和重定向符 vi\vim编辑器 下载VM ware works…

低粉高播放!30万粉竟打造900万播放的B站恰饭

截至2023年第一季度&#xff0c;B站官方发布的财报显示&#xff0c;平台日均活跃用户达9370万&#xff0c;月均活跃用户3.15亿&#xff0c;用户的增长离不开UP主&#xff0c;UP主是构建B站内容多样性不可或缺的存在。 在B站14周年庆典上&#xff0c;陈睿就曾表示&#xff0c;2…

送你一瓶好运喷雾,2023BAT大厂最新Java热门面试题及答案总结

毕业后就在腾讯的高级程序员&#xff0c;由于种种原因&#xff0c;离职出来了。趁着金三银四的求职季&#xff0c;互联网大厂小厂面试了一圈&#xff0c;感觉都不太好&#xff0c; 最后只 收到了京东的录用通知。 简单分析了一下&#xff1a;一面二面hr面都挂过&#xff0c; 原…

智能轮廓仪在汽车行业(零部件)的应用

在汽车领域里的空调&#xff0c;发动机&#xff0c;车内循环系统&#xff0c;油料供给和制动系统中&#xff0c;多会引入螺杆类产品&#xff0c;其主要用于紧固密封连接。螺杆制造工艺的好坏直接关系到其部件的性能和使用寿命&#xff0c;因此需要对螺杆的形状和尺寸进行质量管…

MySQL 第六天作业 备份与还原以及操作索引和视图

一、备份与还原 创建数据库、表以及插入数据 CREATE DATABASE booksDB;use booksDB;CREATE TABLE books(bk_id INT NOT NULL PRIMARY KEY,bk_title VARCHAR(50) NOT NULL,copyright YEAR NOT NULL);INSERT INTO booksVALUES (11078, Learning MySQL, 2010),(11033, Study Ht…

postgrep 9.4 断电后启动不了

journalctl -xe1、问题1&#xff1a;pg_ctl: another server might be running pg_ctl: another server might be running 解决方法&#xff1a;删除原来没有删除的pid文件 rm /opt/PostgreSQL/9.4/data/postmaster.pid 2、问题2 postgres文件丢失 - Unit postgresql-9.4.ser…

在3dMax中保存或使用Corona渲染时发生崩溃?

尝试在3ds Max中保存、打开、合并或渲染文件时&#xff0c;Corona渲染引擎3ds Max崩溃。 使用Corona渲染时&#xff0c;在“虚拟帧缓冲区(VFB)”窗口打开时&#xff0c;会发生更多情况。 此外&#xff0c;渲染时可能会显示警告消息&#xff0c;显示以下Corona错误&#xff1a; …

DataSparkle为非洲数字经济研究提供数据支撑,助力中非合作

7月1日,在第三届中非经贸博览会举办期间,中非经贸合作研究院在中非经贸合作智库研讨会上发布了《非洲数字经济发展指数与中非数字经济合作报告(2023)》(以下简称《报告》)。《报告》系统分析了非洲数字经济的发展情况,并深入解读了中非数字经济合作的现状与机遇。传音移动互联旗…

深入剖析 JavaScript 数组和字符串的各种操作技巧

&#x1f642;博主&#xff1a;小猫娃来啦 &#x1f642;文章核心&#xff1a;深入剖析 JavaScript 数组和字符串的各种操作技巧 近日总结了一下js数组和字符串相关操作方法&#xff0c;今天输出一篇博客&#xff0c;进行前端有关数组字符串相关操作方法的汇总&#xff0c;以后…

为何学习嵌入式系统?嵌入式系统未来的优势是什么?

学习嵌入式系统有许多好处&#xff0c;并且它在未来有许多优势。以下是其中的一些原因&#xff1a; 广泛应用&#xff1a;嵌入式系统广泛应用于智能手机、汽车、家电、医疗设备、工业控制系统等各种设备和系统中。学习嵌入式系统可以让你参与开发和设计这些领域中的创新产品和技…

三分钟为你解析英文音频转文字软件哪个好

你是否曾经听过一段有趣的英语录音&#xff0c;但又不想花费时间手动将其转化为文字&#xff1f;现在&#xff0c;有许多英文音频转文字软件可供您选择&#xff0c;但哪一个才是适合自己的呢&#xff1f;在这篇文章中&#xff0c;我们将探讨英文音频转文字软件哪个好&#xff0…

小程序如何进行分包详细介绍

微信小程序开发过程中&#xff0c;随着业务不断迭代&#xff0c;程序包的体积越来越大&#xff0c;使用分包加载是开发者必须面对的问题。 正常情况下&#xff0c;小程序首次启动时&#xff0c;会将整个代码包下载下来&#xff0c;所以如果代码包过大&#xff0c;会影响小程序…

【云管平台小知识】云管平台和云服务器一样吗?两者有啥区别?

对于云管平台以及云服务器&#xff0c;很多人都是傻傻分不清楚&#xff0c;有人问&#xff0c;云管平台和云服务器一样吗&#xff1f;两者有啥区别&#xff1f;今天我们就来简单聊聊。 一、定义不同 云管平台&#xff1a;是一种管理公有云、私有云和混合云的产品&#xff0c…

Github Pages使用自定义域名

Github Pages使用自定义域名 部署好网站后默认访问地址是xxx.github.io,我们想要自定义为自己的域名 1.DNS解析 这里我使用的是腾讯云,DNS解析DNSPod 添加两条解析记录: 第一个解析记录的记录类型为A&#xff0c;主机记录为&#xff0c;记录值为ping 你的github用户名.githu…