2021ICPC四川省赛个人补题ABDHKLM

news2025/5/19 12:17:58

Dashboard - The 2021 Sichuan Provincial Collegiate Programming Contest - Codeforces

过题难度:

A K D M H B L

铜奖 5  594

银奖 6 368

金奖 8 755

codeforces.com/gym/103117/problem/A

模拟出牌的过程,打表即可

// Code Start Here	
	int t;
	cin >> t;
	while(t--){
		int n;
		cin >> n;
		if(n == 1)cout << 0 << endl;
		else if(n == 2) cout << 1 <<endl;
		else if(n == 3)cout << 1 <<endl;
		else if(n == 4)cout << 2 <<endl;
		else if(n == 5)cout << 2 <<endl;
		else if(n == 6)cout << 3 <<endl;
		else if(n == 7)cout << 3 <<endl;
		else if(n == 8)cout << 3 <<endl;
		else if(n == 9)cout << 2 <<endl;
		else if(n == 10)cout << 2 <<endl;
		else if(n == 11)cout << 1 <<endl;
		else if(n == 12)cout << 1 <<endl;
		else cout << 0 << endl;
	}
	

Problem - K - Codeforces

我们发现最优解肯定是间隔是K的尽量在一起,模拟即可


	int n , k;
	cin >> n >> k;
	if(k >= n){
		for(int i = 1;i<n;i++)cout << i << " ";
		cout << n << endl;
	}
	else{
		vector<bool> vis(n + 1, false);
		vector<int> ans;
		for(int i = 1;i<=n;i++){
			if(!vis[i]){
				vis[i] = true;
				for(int j = i;j<=n;j += k){
					ans.push_back(j);
					vis[j] = true;
				}
			}
		}
		for(int i = 0;i<(int)(ans.size())-1;i++){
			cout << ans[i] << " ";	
		}
		cout << ans.back() << endl;
	}

Problem - D - Codeforces

模拟剪刀石头布即可


	int a1,b1,c1,a2,b2,c2;
	cin>>a1>>b1>>c1>>a2>>b2>>c2;
	int sum=0;
	int min1=min(a1,b2);
	sum+=min1;
	a1-=min1;
	b2-=min1;
	min1=min(b1,c2);
	sum+=min1;
	b1-=min1;
	c2-=min1;
	min1=min(c1,a2);
	sum+=min1;
	c1-=min1;
	a2-=min1;
	min1=min(a1,a2);
	a2-=min1;
	min1=min(b1,b2);
	b2-=min1;
	min1=min(c1,c2);
	c2-=min1;
	int p=0;
	p=max(a2,b2);
	p=max(p,c2);
	sum-=p;
	cout<<sum<<endl;

codeforces.com/gym/103117/problem/M

我们考虑整个扩张的过程,在0 ~ p0内的扩张肯定优先走0~p0,而在0~p0外的扩张对于1e5 * 1e5不现实,考虑优化,只保留一个最大的区间,如果这个区间可以通过,那么一定存在答案


	int n , k , x , p0;
	cin >> n >> k >> x >> p0;
	vector<int> v(n + 1);
	for(int i = 1;i<=n;i++)cin >> v[i];
	vector<int> l(k+1),r(k+1);
	for(int i = 1;i<=k;i++)cin >> l[i];
	for(int i = 1;i<=k;i++)cin >> r[i];
	int max_val = -1;
	for(int i = 1;i<=k;i++){
		if(l[i] >= p0){
			max_val = max(max_val , r[i] - l[i]);
		}
	}
	int max_time = max(p0 , max_val);
	int ans = 0;
	for(int i = 1;i<=n;i++){
		if(v[i] * max_time >= x)ans++;
	}
	cout << ans << endl;

codeforces.com/gym/103117/problem/H

大模拟


	string s;
	cin >> s;
	string now = "";
	// 构造 imasu
	if(!s.empty()) now += s.back() , s.pop_back();
	if(!s.empty()) now += s.back() , s.pop_back();
	if(!s.empty()) now += s.back() , s.pop_back();
	if(!s.empty()) now += s.back() , s.pop_back();
	if(!s.empty()) now += s.back() , s.pop_back();
	reverse(now.begin(),now.end());
	if(now != "imasu")cout << s << now << endl;
	else{
		char ch2 , ch1;
		if(!s.empty())ch2 = s.back() , s.pop_back();
		if(!s.empty())ch1 = s.back() , s.pop_back();
		if(ch1 == 'c' && ch2 == 'h'){
			cout << s << "tte" << endl;
			return;
		}
		if(ch1 == 's' && ch2 == 'h'){
			cout << s << "shite" << endl;
			return;
		}
		if(ch1 == 'i' && ch2 == 'k' && s.empty()){
			cout << s  << "itte" << endl;
			return;
		}
		if(ch1 == 'i' && ch2 == 'k' && !s.empty()){
			cout << s  << "iite" << endl;
			return;
		}
		if(ch2 == 'r'){
			cout << s << ch1 << "tte" << endl;
			return ;
		}
		if(ch2 == 'm' || ch2 == 'b' || ch2 == 'n'){
			cout << s << ch1 << "nde" << endl;
			return;
		}
		if(ch2 == 'k'){
			cout << s << ch1 << "ite" << endl;
			return;
		}
		if(ch2 == 'g'){
			cout << s << ch1 << "ide" << endl;
			return;
		}
		cout << s << ch1 << ch2 << now << endl;

Problem - B - Codeforces

考虑从奇偶性入手来找回合数,特别要注意的是如果一开始为0的话那么后面无法进行,需要特判

	int n,m,k;
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	int sum1=k/n;
	int sum2=k%n;
	vector<int>pre(m+1),last(m+1);
	map<int,int>p;
	vector<int>sum(n+1);
//	cout<<sum1<<endl;
	if(sum1==0){
		map<int,int>p3;
		for(int i=1;i<=sum2;i++){
			if(p3[a[i]]){
				sum[i]++;
				p3[a[i]]--;
				continue;
			}
			p3[a[i]]++;
		}
		for(int i=1;i<n;i++){
			cout<<sum[i]<<' ';
		}
		cout<<sum[n]<<endl;
		return ;
	}
	for(int i=1;i<=n;i++){
		p[a[i]]++;
		if(p[a[i]]==1){
			pre[a[i]]=i;
		}
		last[a[i]]=i;
	}
	map<int,int>p4;
	for(int i=1;i<=n;i++){
		p4[a[i]]++;
		if(p[a[i]]%2==0){
		if(p4[a[i]]%2==0){
			sum[i]+=sum1;
		}
		}
		else{
			if(p[a[i]]==1){
				sum[i]+=sum1/2;
			}
			else{
				if(sum1&1){
					if(p4[a[i]]&1){
						sum[i]+=sum1/2;
					}
					else{
						sum[i]+=sum1/2+1;
					}
				}
				else{
					sum[i]+=sum1/2;
				}
			}
		}
	}
	map<int,int>p2;
	for(int i=1;i<=sum2;i++){
		p2[a[i]]++;
		if(p[a[i]]==1){
			if(sum1%2==0){
				continue;
			}
			else{
				sum[i]++;
				continue;
			}
		}
			if(p[a[i]]%2==1){
				if(sum1&1){
					if(p2[a[i]]%2==1){
						sum[i]++;
						continue;
					}
					else{
						continue;
					}
				}
				else{
					if(p2[a[i]]%2==0){
						sum[i]++;
					}
					continue;
				}
			}
		if(p2[a[i]]%2==0){
			sum[i]++;
			continue;
		}
	}
	for(int i=1;i<n;i++){
		cout<<sum[i]<<' ';
	}
	cout<<sum[n];
	cout<<endl;

https://codeforces.com/gym/103117/problem/L

按照权值分类,跑 100 次bfs,将题目给出的终点作为起点,将所有其他所有点作为终点。在符合条件的权值下找到最小值

vector<int>g[N];
vector<int>val[110];
int ans[110][N];
int vis[N];

void bfs(int n){
	queue<pair<int, int>>q;
	for(int i=0; i<val[n].size(); i++){
		vis[val[n][i]] = 1;
		q.push(make_pair(val[n][i], 0));
	}
	while(q.size()){
		pair<int,int> x = q.front();
		q.pop();
		int now = x.first;
		ans[n][now] = x.second;
		for(int i=0; i<g[now].size(); i++){
			int nxt = g[now][i];
			if(vis[nxt]) continue;
			vis[nxt] = 1;
			q.push({nxt, x.second + 1});
		}
	}
}

int32_t main(){
	int n, m, q, w = 0;
	cin >> n >> m >> q;
	for(int i=1; i<=n; i++){
		int a;
		cin >> a;
		w = max(a , w);
		val[a].push_back(i);
	}
	for(int i=0; i<m; i++){
		int a, b;
		cin >> a >> b;
		g[a].push_back(b);
		g[b].push_back(a);
	}
	for(int i=0; i<=w; i++) for(int j=0; j<=n; j++) ans[i][j] = n;
	for(int i=1; i<=w; i++){
		for(int j=0; j<=n; j++) vis[j] = 0;
		bfs(i);
	}
	while(q--){
		int a, b;
		cin >> a >> b;
		int x = n;
		for(int i=1; i<=b; i++) x = ans[i][a] < x ? ans[i][a] : x;
		if(x == n)cout << -1 << endl;
		else cout << x << endl;
	}
	return 0;
}

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

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

相关文章

oracle linux 95 升级openssh 10 和openssl 3.5 过程记录

1. 安装操作系统&#xff0c;注意如果可以选择&#xff0c;选择安装开发工具&#xff0c;主要是后续需要编译安装&#xff0c;需要gcc 编译工具。 2. 安装操作系统后&#xff0c;检查zlib 、zlib-dev是否安装&#xff0c;如果没有&#xff0c;可以使用安装镜像做本地源安装&a…

Text models —— BERT,RoBERTa, BERTweet,LLama

BERT 什么是BERT&#xff1f; BERT&#xff0c;全称Bidirectional Encoder Representations from Transformers&#xff0c;BERT是基于Transformer的Encoder&#xff08;编码器&#xff09;结构得来的&#xff0c;因此核心与Transformer一致&#xff0c;都是注意力机制。这种…

【AGI】大模型微调数据集准备

【AGI】大模型微调数据集准备 &#xff08;1&#xff09;模型内置特殊字符及提示词模板&#xff08;2&#xff09;带有系统提示和Function calling微调数据集格式&#xff08;3&#xff09;带有思考过程的微调数据集结构&#xff08;4&#xff09;Qwen3混合推理模型构造微调数据…

新能源汽车制动系统建模全解析——从理论到工程应用

《纯电动轻卡制动系统建模全解析&#xff1a;车速-阻力拟合、刹车力模型与旋转质量转换系数优化》 摘要 本文以纯电动轻卡为研究对象&#xff0c;系统解析制动系统建模核心参数优化方法&#xff0c;涵盖&#xff1a; 车速-阻力曲线拟合&#xff08;MATLAB实现与模型验证&…

【Bluedroid】蓝牙HID DEVICE 报告发送与电源管理源码解析

本文基于Android蓝牙协议栈代码&#xff0c;深度解析HID设备&#xff08;如键盘、鼠标&#xff09;从应用层发送输入报告到主机设备的完整流程&#xff0c;涵盖数据封装、通道选择、L2CAP传输、电源管理四大核心模块。通过函数调用链&#xff08;send_report → BTA_HdSendRepo…

第9章 组件及事件处理

9.1 Java Swing概述 图像用户界面&#xff08;GUI&#xff09; java.awt包&#xff0c;即Java抽象窗口工具包&#xff0c;Button&#xff08;按钮&#xff09;、TextField&#xff08;文本框&#xff09;、List&#xff08;列表&#xff09; javax.swing包 容器类&#xff08…

用golang实现二叉搜索树(BST)

目录 一、概念、性质二、二叉搜索树的实现1. 结构2. 查找3. 插入4. 删除5. 中序遍历 中序前驱/后继结点 一、概念、性质 二叉搜索树&#xff08;Binary Search Tree&#xff09;&#xff0c;简写BST&#xff0c;又称为二叉查找树 它满足&#xff1a; 空树是一颗二叉搜索树对…

服务器防文件上传手写waf

一、waf的目录结构&#xff0c;根据自己目录情况进行修改 二、创建文件夹以及文件 sudo mkdir -p /www/server/waf-monitor sudo mkdir -p /www/server/waf-monitor/quarantine #创建文件夹 chmod 755 /www/server/waf-monitor #赋权cd /www/server/waf-monitor/touch waf-m…

计算机的基本组成与性能

1. 冯诺依曼体系结构&#xff1a;计算机组成的金字塔 1.1. 计算机的基本硬件组成 1.CPU - 中央处理器&#xff08;Central Processing Unit&#xff09;。 2.内存&#xff08;Memory&#xff09;。 3.主板&#xff08;Motherboard&#xff09;。主板的芯片组&#xff08;Ch…

linux下编写shell脚本一键编译源码

0 前言 进行linux应用层编程时&#xff0c;经常会使用重复的命令对源码进行编译&#xff0c;然后把编译生成的可执行文件拷贝到工作目录&#xff0c;操作非常繁琐且容易出错。本文编写一个简单的shell脚本一键编译源码。 1 linux下编写shell脚本一键编译源码 shell脚本如下&…

【深度学习】#12 计算机视觉

主要参考学习资料&#xff1a; 《动手学深度学习》阿斯顿张 等 著 【动手学深度学习 PyTorch版】哔哩哔哩跟李沐学AI 目录 目标检测锚框交并比&#xff08;IoU&#xff09;锚框标注真实边界框分配偏移量计算损失函数 非极大值抑制预测 多尺度目标检测单发多框检测&#xff08;S…

Baklib赋能企业知识资产AI化升级

AI驱动知识管理革新 在数字化转型浪潮中&#xff0c;企业知识管理的范式正经历AI技术的深度重构。传统知识库受限于静态存储与人工维护&#xff0c;而Baklib通过构建知识中台架构&#xff0c;将多模态数据处理与语义理解引擎深度融合&#xff0c;实现知识资产的动态聚合与智能…

【C++】模板上(泛型编程) —— 函数模板与类模板

文章目录 一、啥是泛型编程二、函数模板2.1、函数模板的概念2.2、函数模板的格式2.3、函数模板的原理2.4、函数模板的实例化2.4.1、隐式实例化&#xff1a;让编译器根据实参推演模板参数的实际类型2.4.2、显示实例化&#xff1a;在函数名后的<>中指定模板参数的实际类型 …

【大模型系列】logprobs(对数概率)参数

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

C语言内存函数与数据在内存中的存储

一、c语言内存函数 1、memcpy函数是一个标准库函数&#xff0c;用于内存复制。功能上是用来将一块内存中的内容复制到另一块内存中。用户需要提供目标地址、源地址以及要复制的字节数。例如结构体之间的复制。 memcpy函数的原型是&#xff1a;void* memcpy&#xff08;void* …

通过MCP让LLM调用系统接口

场景 MCP的出现大大丰富了LLM的功能&#xff0c;对于存量系统&#xff0c;我们希望能让模型调用已有的接口&#xff0c;以最小的成本让AI能够获取系统内部数据。因此我们开发了一个名为http-api-call的MCP Server&#xff0c;来支持模型到内部API的调用 实现方案 使用用标准…

【刚下赛场!】2025年江西省电子专题赛 - 现场制作:简易数控直流电流源原题

一、题目要求 二、赛场注意事项 1、一定要用铜柱将板子升起来&#xff0c;不然我们剪下来的引脚在测试的时候放在桌子上非常容易导致我们的板子短路&#xff08;记得把铜柱卸下来再上交作品&#xff0c;不然会被认为是做标记判0分&#xff09;&#xff1b; 2、发下来器件之后…

材料×工艺×AI:猎板PCB重构汽车电子四层板技术逻辑

一、汽车电子四层板的三大核心挑战 1. 极端环境下的可靠性保障 汽车电子需在-40℃至150℃的剧烈温变、高湿振动等环境中稳定运行。例如&#xff0c;电池管理系统&#xff08;BMS&#xff09;要求PCB在高温下阻抗漂移率低于8%&#xff0c;且镀层需具备抗腐蚀能力。猎板PCB通…

MCP(一)——QuickStart

目录 1. MCP简介2. MCP的优势3. MCP核心4. QuickStart For Server Developers(仅具参考)4.1 MCP核心概念4.2 构建MCP服务器的代码4.2.1 设置MCP服务器实例4.2.2 辅助函数4.2.3 实现工具执行4.2.4 在Cherry-Studio中添加MCP服务器4.2.5 演示4.2.5.1 测试工具get_alerts4.2.5.2 测…

Spring AOP从0到1

Spring有两大核心&#xff1a; 1、IoC 控制反转 2、AOP 面向切面编程 AOP&#xff1a;切面就是指某⼀类特定问题, 所以AOP也可以理解为面向特定⽅法编程. 引入AOP依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri…