Codeforces Round 1003 (Div. 4)(A~G题题解)

news2025/2/12 12:15:13

A. Skibidus and Amog'u

思路:把字符串最后的us变成i就可以了,水题一个

#include <iostream>  
#include <string>  

int main() {  
    int t;  
    std::cin >> t;  
    std::cin.ignore();  

    while (t--) {  
        std::string W;  
        std::getline(std::cin, W); 


        if (W.length() >= 2 && W.substr(W.length() - 2) == "us") {  
 
            std::string root = W.substr(0, W.length() - 2);  
            std::string plural = root + "i";  
            std::cout << plural << std::endl;  
        }  
    }  

    return 0;  
}

B. Skibidus and Ohio

 思路,有一对相邻的相同就可以把整个序列的长度变成1,否则就是原长度

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,k;
int a[200005];
string s;
void solve()
{
	cin>>s;
	for(int i=0;i<s.size()-1;i++)
	{
		if(s[i]==s[i+1])
		{
			cout<<1<<"\n";
			return ;
		}
	}
	cout<<s.size()<<"\n";
}

signed main()
{
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>t;
	while(t--)
	solve();
	return 0;
}

C1. Skibidus and Fanum Tax (easy version)

思路:本题b数组只有一个数,那么我们将a数组所有数都与b数组进行计算,

我们设x=a[i],y=b[i]-a[i],

1.假设x和y都大于等于前面一个,我们就选择min(x,y)作为a[i]

2.如果只有x大于等于前面一个,就选择x作为a[i]

3.如果只有y大于等于前面一个,就选择y作为a[i]

4.如果都不大于,就输出NO结束这次测试数据

如果运行到最后就是输出YES

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,m;
int a[200005];
int b[200005];
string s;
void solve()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=1;i<=m;i++)
	{
		cin>>b[i];
	}
	a[0]=-0x3f3f3f3f;
	int flag=1;
	for(int i=1;i<=n;i++)
	{
		if(b[1]-a[i]<=a[i]&&b[1]-a[i]>=a[i-1])
		{
			a[i]=b[1]-a[i];
		}
		else if(b[1]-a[i]>=a[i-1]&&a[i]<a[i-1])
		{
			a[i]=b[1]-a[i];
		}
		if(a[i]<a[i-1])
		{
			flag=0;
			break;
		}
	}
	if(flag==0)
	{
		cout<<"NO\n";
	}
	else
	{
		cout<<"YES\n";
	}
}

signed main()
{
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>t;
	while(t--)
	solve();
	return 0;
}

C2. Skibidus and Fanum Tax (hard version)

思路:一眼二分,我们还是上面的处理思路,但是我们该如何选取b[j]-a[i]呢?

我们可以用lower_bound去寻找第一个大于a[i]+a[i-1]的b[i]的位置,找到之后,就是c1的处理方式,直接去操作就可以了

分四步走战略

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,m;
int a[200005];
int b[200005];
string s;
void solve()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=1;i<=m;i++)
	{
		cin>>b[i];
	}
	b[m+1]=1e12;
	sort(b+1,b+1+m);
	a[0]=-1e12;
	a[1]=min(a[1],b[1]-a[1]);
	for(int i=2;i<=n;i++)
	{
		int flag=a[i-1]+a[i];
		int pos=lower_bound(b+1,b+2+m,flag)-b;
		
		if(pos==m+1&&a[i]<a[i-1])
		{
			cout<<"NO\n";
			return ;
		}
		else if(pos>=1&&pos<=m&&a[i]<a[i-1]&&b[pos]-a[i]>=a[i-1])
		{
			a[i]=b[pos]-a[i];
		}
		else if((pos>=1&&pos<=m&&a[i]>=b[pos]-a[i]&&b[pos]-a[i]>=a[i-1]))
		{
			a[i]=b[pos]-a[i];
		}
	}
	cout<<"YES\n";
}

signed main()
{
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>t;
	while(t--)
	solve();
	return 0;
}

D. Skibidus and Sigma

思路:其实就是按照顺序单行数组的累加和大小排序就行,然后计算一遍累加和就过了

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,m;
int x;
int sum;
string s;
pair<int,int> p[200005];
void solve()
{
	cin>>n>>m;
	int a[n+1][m+1];
	for(int i=1;i<=n;i++)
	{
		sum=0;
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
			sum+=a[i][j];
		}
		p[i].first=sum;
		p[i].second=i;
	}
	sort(p+1,p+1+n);
	sum=0;
	int ans=0;
	for(int i=n;i>=1;i--)
	{
		for(int j=1;j<=m;j++)
		{
			sum+=a[p[i].second][j];
			ans+=sum;
		}
	}
	cout<<ans<<"\n";
}

signed main()
{
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>t;
	while(t--)
	solve();
	return 0;
}

 E. Skibidus and Rizz

思路:我们首先要排除两种可能得情况

1,n<k,m<k,如果都小于k,就算单纯连起来也不可能达到要求,直接输出NO

2,abs(n-m)>k,整体都大于k了,呢么已经超过了最大平衡值k,所以不满足直接输出NO

3.否则,我们就先用最多的数构建一个长度为k的序列,如果是0,那么后续就跟10,直到其中一个没有了,如果剩下的是0,就补到最后面,如果剩下的是1,就补到前面,反之依然,就可以解决了

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,m,k;
int a[200005];
void solve()
{
	cin>>n>>m>>k;
	if(abs(n-m)>k)
	{
		cout<<-1<<"\n";
	}
	else if(k>n&&k>m)
	{
		cout<<-1<<"\n";
	}
	else
	{
		string s="";
		if(n>=m)
		{
			n-=k;
			for(int i=1;i<=k;i++)
			{
				s+="0";
			}
			for(int i=1;i<=min(n,m);i++)
			{
				s+="10";
			}
			if(n>=m)
			{
				for(int i=1;i<=n-m;i++)
				{
					s+="0";
				}
			}
			else
			{
				for(int i=1;i<=m-n;i++)
				{
					s+="1";
				}
			}
		}
		else
		{
			m-=k;
			for(int i=1;i<=k;i++)
			{
				s+="1";
			}
			for(int i=1;i<=min(n,m);i++)
			{
				s+="01";
			}
			if(n>=m)
			{
				for(int i=1;i<=n-m;i++)
				{
					s+="0";
				}
			}
			else
			{
				for(int i=1;i<=m-n;i++)
				{
					s+="1";
				}
			}
		}
		cout<<s<<"\n";
	}
	
}

signed main()
{
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>t;
	while(t--)
	solve();
	return 0;
}

F. Skibidus and Slay

思路:直接去寻找每一个点链接的子节点,只要出现的次数大于等于2,就可以将其标注为1

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,k;
int a[500005];
int u,v;
vector<int> e[500005];
string s;
void dfs(int v,int fa,vector<int> &vis)
{
	map<int,int> mp;
	mp.clear();
	mp[a[v]]++;
	for(int u:e[v])
	{
		mp[a[u]]++;
		if(mp[a[u]]==2)
		{
			vis[a[u]]=1;
		}
	}
	for(int u:e[v])
	{
		if(u!=fa)
		{
			dfs(u,v,vis);
		}
	}
}
void solve()
{
	cin>>n;
	vector<int> vis(n+1,0);
	for(int i=1;i<=n;i++) 
	{  
        e[i].clear();  
    }  
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=1;i<=n-1;i++)
	{
		cin>>u>>v;
		e[u].push_back(v);
		e[v].push_back(u);
	}
	dfs(1,-1,vis);
	for(int i=1;i<=n;i++)
	cout<<vis[i]; 
	cout<<"\n";
}

signed main()
{
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>t;
	while(t--)
	solve();
	return 0;
}

 G. Skibidus and Capping

思路:直接找到1~200000,里面的所有的素数,我们只需要统计三种情况的结果即可,

1,如果是素数的话,要找到所有和他能匹配的素数

2.如果是pq和pq的话,我们直接计算即可 

3.如果是pq的话,我们要找到所有的p和q的数量

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,k;
int a[200005];
int pri[200005];//素数集合 
int vis[200005];//判断是否是素数
int cnt=0;//统计素数数量 
int p[200005];//每个数的最小质数 
int shu[200005];
void ini()
{
	vis[1]=1;
	for(int i=2;i<=200000;i++)
	{
		if(vis[i]==0)
		{
			cnt++;
			pri[cnt]=i;
		}
		for(int j=1;j<=cnt&&i*pri[j]<=200000;j++)
		{
			vis[i*pri[j]]=1;
			p[i*pri[j]]=pri[j];
			if(i%pri[j]==0)
			break;
		}
	} 
}
//三种情况
//1.两个都是素数
//2.pq和pq这种
//3.p和pq这种 
void solve()
{
	cin>>n;
	int num=0;//用于统计素数个数 
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		if(vis[a[i]]==0)
		{
			num++; 
		}
		shu[a[i]]++;
	}
	int ans=(num+1)*num/2;
	for(int i=2;i<=n;i++)
	{
		//第一种 
		if(vis[i]==0)
		{
			ans-=shu[i]*(shu[i]+1)/2;
			continue;
		}
		int q=i/p[i];
		if(vis[q]==1)
		{
			continue;
		}
		//第二种 
		ans+=shu[i]*(shu[i]+1)/2;
		//第三种
		ans+=shu[i]*shu[p[i]];
		if(q!=p[i])
		{
			ans+=shu[i]*shu[q]; 
		}
	}
	cout<<ans<<"\n";
	for(int i=1;i<=200000;i++)
	{
		shu[i]=0;
	}
}
signed main()
{
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	ini();
	cin>>t;
	while(t--)
	solve();
	return 0;
}

 

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

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

相关文章

ubuntu使用防火墙开放和关闭指定端口

防火墙可以阻止或允许外部对特定端口的访问&#xff0c;Ubuntu 常用的防火墙管理工具是 ufw&#xff08;Uncomplicated Firewall&#xff09; &#xff0c;如果在开发网络通信相关的内容时&#xff0c;要确保所需的端口是打开的&#xff0c;这样可以排除出题出现时的一个问题—…

mysql8.0使用PXC实现高可用

1.什么是 PXC PXC 是一套 MySQL 高可用集群解决方案&#xff0c;与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题&#xff0c;基本上可以达到实时同步。而且节点与节点之间&#xff0c;他们相互的关系是对等的。PXC 最关注的是数据…

大数据学习之SparkStreaming、PB级百战出行网约车项目一

一.SparkStreaming 163.SparkStreaming概述 Spark Streaming is an extension of the core Spark API that enables scalable, high-throughput, fault-tolerant stream processing of live data streams. Spark Streaming 是核心 Spark API 的扩展&#xff0c;支持实时数据…

Ollama部署DeepSeek(windows or ubuntu)

Ollama(官网是https://ollama.com/)是一个专为在本地机器上便捷部署和运行大型语言模型&#xff08;LLM&#xff09;而设计的开源框架。它简化了大型语言模型的部署过程&#xff0c;提供了轻量级与可扩展的架构&#xff0c;使得研究人员、开发人员和爱好者能够更加方便地在本地…

10.代码生成器-树表

1.导入部门表 2.配置生成信息页面 生成代码即可使用。

Python的那些事第十六篇:Python的网络爬虫技术

基于Python的网络爬虫技术研究与应用 摘要 随着互联网的飞速发展&#xff0c;网络爬虫技术在数据采集、信息挖掘等领域发挥着重要作用。本文详细介绍了Python环境下常用的网络爬虫技术&#xff0c;包括Requests库、BeautifulSoup库以及Scrapy框架。通过对这些工具的使用方法、…

【AIGC】在VSCode中集成 DeepSeek(OPEN AI同理)

在 Visual Studio Code (VSCode) 中集成 AI 编程能力&#xff0c;可以通过安装和配置特定插件来实现。以下是如何通过 Continue 和 Cline 插件集成 DeepSeek&#xff1a; 一、集成 DeepSeek 获取 DeepSeek API 密钥&#xff1a;访问 DeepSeek 官方网站&#xff0c;注册并获取 …

如何下载CentOS镜像文件

文章目录 如何下载CentOS镜像文件 如何下载CentOS镜像文件 直接前往阿里云官网下载即可。 阿里云官网地址&#xff1a;https://www.aliyun.com 进入官网后&#xff0c;鼠标停留在文档与社区位置&#xff0c;找到镜像站&#xff0c;点击进入即可。进入后&#xff0c;我们可以…

开启对话式智能分析新纪元——Wyn商业智能 BI 携手Deepseek 驱动数据分析变革

2月18号&#xff0c;Wyn 商业智能 V8.0Update1 版本将重磅推出对话式智能分析&#xff0c;集成Deepseek R1大模型&#xff0c;通过AI技术的深度融合&#xff0c;致力于打造"会思考的BI系统"&#xff0c;让数据价值触手可及&#xff0c;助力企业实现从数据洞察到决策执…

嵌入式C语言:大小端详解

目录 一、大小端的概念 1.1. 大端序&#xff08;Big-endian&#xff09; 1.2. 小端序&#xff08;Little-endian&#xff09; 二、大小端与硬件体系的关系 2.1. 大小端与处理器架构 2.2. 大小端与网络协议 2.3. 大小端对硬件设计的影响 三、判断系统的大小端方式 3.1.…

Vue事件处理 - 按键修饰符

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue事件处理 - 按键修饰符 目录 按键修饰符 常见修饰符 绑定按键事件 绑定事件 优化回车修饰符 多个按键 直接绑定数字 总结 按键修饰符 常见修饰符 .esc .up .down .left .right . space .ctrl .shift .delete 绑定…

数据中心网络监控

数据中心是全球协作的特定设备网络&#xff0c;用来在internet网络基础设施上传递、加速、展示、计算、存储数据信息。 对于任何利用IT基础设施的企业来说&#xff0c;数据中心都是运营的核心&#xff0c;它本质上为整个业务网络托管业务应用程序和存储空间。数据中心可以是任…

基于Kotlin中Flow扩展重试方法

最近项目中统一采用Kotlin的Flow来重构了网络请求相关代码。 目前的场景是&#xff0c;接口在请求的时候需要一个accessToken值&#xff0c;因为此值会过期或者不存在&#xff0c;需要刷新&#xff0c;因此最终方案是在使用Flow请求的时候先获取accessToken值然后再进行接口请求…

oracle如何查询历史最大进程数?

oracle如何查询历史最大进程数&#xff1f; SQL> desc dba_hist_resource_limitName Null? Type---------------------------------------------------- -------- ------------------------------------SNAP_ID …

利用HTML和css技术编写学校官网页面

目录 一&#xff0c;图例展示 二&#xff0c;代码说明 1&#xff0c;html部分&#xff1a; 【第一张图片】 【第二张图片】 【第三张图片】 2&#xff0c;css部分&#xff1a; 【第一张图片】 【第二张图片】 【第三张图片】 三&#xff0c;程序代码 一&#xff0c;…

Flink KafkaConsumer offset是如何提交的

一、fllink 内部配置 client.id.prefix&#xff0c;指定用于 Kafka Consumer 的客户端 ID 前缀partition.discovery.interval.ms&#xff0c;定义 Kafka Source 检查新分区的时间间隔。 请参阅下面的动态分区检查一节register.consumer.metrics 指定是否在 Flink 中注册 Kafka…

拯救者Y9000P双系统ubuntu22.04安装4070显卡驱动

拯救者Y9000P双系统ubuntu22.04安装4070显卡驱动 1. 前情&#xff1a; 1TB的硬盘&#xff0c;分了120G作ubuntu22.04。/boot: 300MB, / : 40GB, /home: 75G, 其余作swap area。 2. 一开始按这个教程&#xff1a;对我无效 https://blog.csdn.net/Eric_xkk/article/details/1…

Web3 的虚实融合之路:从虚拟交互到元宇宙构建

在这个数字技术日新月异的时代&#xff0c;我们正站在 Web3 的门槛上&#xff0c;见证着互联网的又一次革命。Web3 不仅仅是技术的迭代&#xff0c;它代表了一种全新的交互方式和价值创造模式。本文将探讨 Web3 如何推动虚拟交互的发展&#xff0c;并最终实现元宇宙的构建&…

QT修仙笔记 事件大圆满 闹钟大成

学习笔记 牛客刷题 闹钟 时钟显示 通过 QTimer 每秒更新一次 QLCDNumber 显示的当前时间&#xff0c;格式为 hh:mm:ss&#xff0c;实现实时时钟显示。 闹钟设置 使用 QDateTimeEdit 让用户设置闹钟时间&#xff0c;可通过日历选择日期&#xff0c;设置范围为当前时间到未来 …

2025 年 2 月 TIOBE 指数

2025 年 2 月 TIOBE 指数 二月头条:快,更快,最快! 现在,世界需要每秒处理越来越多的数字,而硬件的发展速度却不够快,程序的速度变得越来越重要。话虽如此,快速编程语言在 TIOBE 指数中取得进展也就不足为奇了。编程语言 C++ 最近攀升至第 2 位,Go 已稳居前 10 名,Ru…