2024 山东省ccpc省赛

news2025/5/18 11:45:31

目录

I(签到)

题目简述:

思路:

代码:

A(二分答案)

题目简述:

思路:

代码:

K(构造)

题目:

思路:

代码:

 F(后缀和+排序)

题目:

思路:

代码:



https://codeforces.com/gym/105385

I(签到)

题目简述:

判断一个字符串首位字符是否相同,如果初试状态不相同,是否可以经过整体左移后使其相同,如果相同输出左移次数,否则输出-1;

思路:

整体左移的操作是牵一发而动全身的,所以只有有俩相同且相邻字符时才可以通过左移操作使其符合条件

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
//typedef long long ll;
#define endl "\n"
#define PII pair<int,int>
//#define x first
//#define y second
//priority_queue<int, vector<int>, greater<int>> pq;//小根堆
//{并查集
//int fa[N];
//int n;
//void init(){
//	for(int i=0;i<=n;i++)fa[i]=i;
//}初始化
//int get(int x){
//	return fa[x]=(fa[x]==x?x:get(fa[x]));
//}查找
//void merge(int a,int b){
//	fa[get(a)]=get(b);
//}合并
//}
const int N=2e5+10;
void solve(){
	string s;
	cin >> s;
	if(s[0]==s[s.size()-1])
	{
		cout << 0 << endl;
		return ;
	}
特判一开始就符合条件的情况
	for(int i=0;i<s.size()-1;i++)
	{
		if(s[i]==s[i+1])
		{
			cout << i+1 << endl;
			return ;
		}
	}
	cout <<-1 << endl;	
}	 
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int q;
	cin >> q;
	while(q--)
	solve();
}

A(二分答案)

题目简述:

使用n台打印机同时打印k份试题,每台打印机都是周期性工作,第i台打印机,每ti秒打印一份,每打印li份就要休息wi秒,问打印完所需要的最短时间;

思路:

很明显是一个二分答案,且是最大值最小类型(时间越多越能完成打印任务,xxx√√√,找第一个对号,最大值当中符合条件的最小值)

确定完二分后就要写check函数,我们二分时间,然后找当前时间内所有打印机能打印的最大份数,如果份数>k返回1,否则返回0

那么如何确定最大份数呢?我们可以把每一周期看做每一段,根据时间可以算得有多少段,有多少段就有多少个li

因为不一定是完整周期,所以我们还要考虑,最后一段不完整的区间,用剩下的时间除以ti,但是需要注意这个结果可能会越界到wi时间里,也就是说剩下的时间除以ti的值最大只能是li

这个二分还要注意一下边界,右边界需要设置大一点;

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
//typedef long long ll;
#define endl "\n"
#define PII pair<int,int>
//#define x first
//#define y second
//priority_queue<int, vector<int>, greater<int>> pq;//小根堆
//{并查集
//int fa[N];
//int n;
//void init(){
//	for(int i=0;i<=n;i++)fa[i]=i;
//}初始化
//int get(int x){
//	return fa[x]=(fa[x]==x?x:get(fa[x]));
//}查找
//void merge(int a,int b){
//	fa[get(a)]=get(b);
//}合并
//}
const int N=2e5+10;
int t[N],l[N],w[N];int n,k;
bool check(int x)
{
	int num=0;
	int p=x;
	for(int i=1;i<=n;i++){
		p=x;
//		if(p/t[i]<=l[i]){
//			num+=p/t[i];
//			continue;
//		}
		int q=t[i]*l[i]+w[i];
		num+=p/q*l[i];
		p-=p/q*q;
		if(p/t[i]<=l[i])
		num+=p/t[i];
		else num+=l[i];
		if(num>=k)return 1;
	}
	return 0;
}
void solve(){
	
	cin>> n >>k;
	for(int i=1;i<=n;i++)
	{
		cin >> t[i] >> l[i] >> w[i] ;
	}	
	int l=1,r=2e18;
	while(l+1!=r)
	{
		int mid=l+r>>1;
		if(check(mid))r=mid;
		else l=mid;
	}
	cout << r << endl;
}	 
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int q;
	cin >> q;
	while(q--)
	solve();
}

K(构造)

题目:

注意是不同行相同列

思路:

上面n-2行设置成i,然后最后两行前面n-2个数是从n-1—2*n-4

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
//typedef long long ll;
#define endl "\n"
#define PII pair<int,int>
//#define x first
//#define y second
//priority_queue<int, vector<int>, greater<int>> pq;//小根堆
//{并查集
//int fa[N];
//int n;
//void init(){
//	for(int i=0;i<=n;i++)fa[i]=i;
//}初始化
//int get(int x){
//	return fa[x]=(fa[x]==x?x:get(fa[x]));
//}查找
//void merge(int a,int b){
//	fa[get(a)]=get(b);
//}合并
//}
const int N=2e5+10;
void solve(){
	int n;
	cin >>n;
	cout << "Yes" <<endl;
	if(n>3)
	{
		int a=2*n-3,b=2*n-2,c=2*n-1,d=2*n;
最后四个数单独揪出来
		for(int i=1;i<=n-2;i++)
		{
			for(int j=1;j<=n;j++)
			{
				cout << i << ' ' ;
			}
			cout << endl;;
		}
前n-2行都为i
		int js=0;
		for(int i=1;i<=2;i++)
		{
			for(int j=n-1;j<n-1+n;j++)
			{
				js++;
				if(js==n-1)cout << a << ' ';
				else if(js==n)cout << b << ' ';
				else if(js==2*n-1)cout << c << ' ';
				else if(js==2*n)cout << d << ' ';
				else cout << j <<' ';
			}
			cout << endl;
		}
	}
	if(n==2)
	{
		cout << 1 << ' ' <<2 << endl;
		cout << 3 << ' ' << 4 << endl;
	}
	if(n==3)
	{
		cout << 3 << ' ' << 2 << ' ' << 6 << endl;
		cout << 4 << ' ' << 3 << ' ' << 3 << endl;
		cout << 3 << ' ' << 1 << ' ' << 5 << endl;
	}
}	 
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int q=1;
//	cin >> q;
	while(q--)
	solve();
}

 F(后缀和+排序)

题目:

思路:

  1. 前缀和逆序处理:从后往前计算数组 a 的前缀和,将原数组转化为后缀和数组形式,a[i] 变为从 i 到 n 的元素和 。
  2. 排序:对 a[2] 到 a[n] 排序,此时数组从大到小排列(a[1] 是原数组所有元素和,单独处理 )。
  3. 输出结果
    • 先输出 a[1],这是 k = 1 时的结果 。
    • 然后依次累加并输出后续元素,每次累加对应增加一段,实现对不同 k 值结果的计算与输出 

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
//typedef long long ll;
#define endl "\n"
#define PII pair<int,int>
//#define x first
//#define y second
//priority_queue<int, vector<int>, greater<int>> pq;//小根堆
//{并查集
//int fa[N];
//int n;
//void init(){
//	for(int i=0;i<=n;i++)fa[i]=i;
//}初始化
//int get(int x){
//	return fa[x]=(fa[x]==x?x:get(fa[x]));
//}查找
//void merge(int a,int b){
//	fa[get(a)]=get(b);
//}合并
//}
const int N=5e5+10;
int a[N];
void solve(){
	int n;cin>>n;
	    for(int i=1;i<=n;i++)cin>>a[i];
	    for(int i=n-1;i>=1;i--)a[i]+=a[i+1];
	    sort(a+2,a+n+1);
	    int sum=a[1];
	    cout<<sum<<" ";
	    for(int i=n;i>=2;i--) {
	        sum+=a[i];
	        cout<<sum<<" ";
	    }
	    cout<<endl;
}	 
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int q=1;
	cin >> q;
	while(q--)
	solve();
}

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

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

相关文章

SAP HCM 0008数据存储逻辑

0008信息类型&#xff1a;0008信息类型是存储员工基本薪酬的地方&#xff0c;因为很多企业都会都薪酬带宽&#xff0c;都会按岗定薪&#xff0c;所以在上线前为体现工资体系的标准化&#xff0c;都会在配置对应的薪酬关系&#xff0c;HCM叫间接评估&#xff0c;今天我们就分析下…

如何使用通义灵码辅助学习C++编程 - AI编程助手提升效率

一、引言 C 是一门功能强大且灵活的编程语言&#xff0c;在软件开发、系统编程、游戏开发等领域广泛应用。然而&#xff0c;其复杂的语法和丰富的特性使得学习曲线较为陡峭。对于初学者而言&#xff0c;在学习过程中难免会遇到各种问题&#xff0c;如语法理解困难、代码调试耗…

【Docker】CentOS 8.2 安装Docker教程

目录 1.卸载 2.安装依赖 3.设置yum源 4.安装Docker 5.启动Docker 6.设置Docker开机自启 7.验证Docker是否安装成功 8.配置多个国内镜像地址 9.重启Docker 10.Docker指令大全 10.1.启动与关闭Docker 10.2.Docker镜像操作 10.3.Docker容器操作 10.4.Docker Compose操作…

K230 ISP:一种新的白平衡标定方法

第一次遇见需要利用光谱响应曲线进行白平衡标定的方法。很好奇是如何利用光谱响应曲线进行白平衡标定的。 参考资料参考&#xff1a;K230 ISP图像调优指南 K230 介绍 嘉楠科技 Kendryte 系列 AIoT 芯片中的最新一代 AIoT SoC K230 芯片采用全新的多核异构单元加速计算架构&a…

桃芯ingchips——windows HID键盘例程无法同时连接两个,但是安卓手机可以的问题

目录 环境 现象 原理及解决办法 环境 PC&#xff1a;windows11 安卓&#xff1a;Android14 例程使用的是HID Keyboard&#xff0c;板子使用的是91870CQ的开发板&#xff0c;DB870CC1A 现象 连接安卓手机时并不会出现该现象&#xff0c;两个开发板都可以当做键盘给手机发按…

[Linux] vim及gcc工具

目录 一、vim 1.vim的模式 2.vim的命令集 (1):命令模式 (2):底行模式 3.vim配置 二、gcc 1.gcc格式及选项 2.工作布置 三、自动化构建工具makefile 1.基本使用方法 2.配置文件解析 3.拓展 在linux操作系统的常用工具中&#xff0c;常用vim来进行程序的编写&#xff1b…

MySQL只操作同一条记录也会死锁吗?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL只操作同一条记录也会死锁吗?】面试题。希望对大家有帮助&#xff1b; MySQL里where条件的顺序影响索引使用吗&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在MySQL中&#xff0c;死锁通常发生在多…

数据结构与算法——双向链表

双向链表 定义链表分类双向链表&#xff1a;带头双向循环链表 初始化打印尾插头插尾删头删查找在pos(指定位置)之后插入结点在pos(指定位置)之前插入结点删除pos(指定位置)的结点销毁顺序表与链表的分析 定义 链表分类 单向和双向 带头和不带头 带头是指存在一个头结点&…

MODBUS RTU调试助手使用方法详解

一、软件简介 485调试助手是一款常用的串口通信调试工具&#xff0c;专门用于RS-485总线设备的测试、调试和通信监控。它支持多种串口参数设置&#xff0c;提供数据收发功能&#xff0c;是工业现场调试的必备工具之一。 二、软件安装与启动 1. 系统要求 Windows 7/10/11操作…

自由学习记录(60)

Lecture 16 Ray Tracing 4_哔哩哔哩_bilibili 老师说的“高频采样”问题是什么&#xff1f; 现在考虑一个特殊情况&#xff1a; ❗ 一个像素内&#xff0c;图像信号变化很剧烈&#xff08;高频&#xff09;&#xff1a; 比如&#xff1a; 细网格纹理 马赛克背景 很高频的…

现代计算机图形学Games101入门笔记(三)

三维变换 具体形式缩放&#xff0c;平移 特殊点旋转。这里涉及到坐标系&#xff0c;先统一定义右手坐标系&#xff0c;根据叉乘和右手螺旋判定方向。这里还能法线Ry Sina 正负与其他两个旋转不一样。这里可以用右手螺旋&#xff0c;x叉乘z&#xff0c;发现大拇指朝下&#xff0…

WeakAuras Lua Script <BiaoGe>

WeakAuras Lua Script <BiaoGe> 表格拍卖插件WA字符串 表格字符串代码&#xff1a; !WA:2!S3xA3XXXrcoE2VH9l7ZFy)C969PvDpSrRgaeuhljFlUiiSWbxaqXDx(4RDd0vtulB0fMUQMhwMZJsAO5HenLnf1LPSUT4iBrjRzSepL(pS)e2bDdWp5)cBEvzLhrMvvnAkj7zWJeO7mJ8kYiJmYiImYF0b(XR)JR9JRD…

chrome 浏览器插件 myTools, 日常小工具。

1. 起因&#xff0c; 目的: 比如&#xff0c;chatgpt, google&#xff0c; 打开网页&#xff0c;就能直接输入文字&#xff0c;然后 grok 就不行&#xff0c;必须用鼠标点一下&#xff0c;才能输入文字。 对我而言&#xff0c;是个痛点&#xff01;写个插件&#xff0c;自动点…

智慧校园(含实验室)智能化专项汇报方案

该方案聚焦智慧校园(含实验室)智能化建设,针对传统实验室在运营监管、环境监测、安全管控、排课考勤等方面的问题,依据《智慧校园总体框架》等标准,设计数字孪生平台、实验室综合管理平台、消安电一体化平台三大核心平台,涵盖通信、安防、建筑设备管理等设施,涉及 395 个…

第三十四节:特征检测与描述-SIFT/SURF 特征 (专利算法)

一、特征检测:计算机视觉的基石 在计算机视觉领域中,特征检测与描述是实现图像理解的核心技术。就像人类通过识别物体边缘、角点等特征来认知世界,算法通过检测图像中的关键特征点来实现: 图像匹配与拼接 物体识别与跟踪 三维重建 运动分析 其中,SIFT(Scale-Invariant F…

【前端优化】vue2 webpack4项目升级webpack5,大大提升运行速度

记录一下过程 手里有个老项目&#xff0c;vue2webpack4 项目很大&#xff0c;每次运行、运行都要将近10分钟 现在又要往里面写很多东西&#xff0c;再不优化&#xff0c;开发着会更难受&#xff0c;所以决定先将它升级至webpack5 最初失败的尝试 直接在项目里安装了webpack5 但…

Nginx应用场景详解与配置指南

1. 什么是Nginx&#xff1f; Nginx&#xff08;发音为"engine-x"&#xff09;是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。它以高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。 2. Nginx的主要应用场景 2.1 …

vue2 切换主题色以及单页面好使方法

今天要新增一个页面要根据不同公司切换不同页面主题色&#xff0c;一点一点来&#xff0c;怎么快速更改 el-pagination 分页组件主题色。 <el-pagination :page-size"pageSize" :pager-count"pageCount"layout"sizes, prev, pager, next, jumper,…

JavaScript【6】事件

1.概述&#xff1a; 在 JavaScript 中&#xff0c;事件&#xff08;Event&#xff09;是浏览器或 DOM&#xff08;文档对象模型&#xff09;与 JavaScript 代码之间交互的一种机制。它代表了在浏览器环境中发生的特定行为或者动作&#xff0c;比如用户点击鼠标、敲击键盘、页面…

STM32F10xx 参考手册

6. 什么是寄存器 本章参考资料&#xff1a;《STM32F10xx 参考手册》、《STM32F10xx数据手册》、 学习本章时&#xff0c;配合《STM32F10xx 参考手册》“存储器和总线架构”及“通用I/O(GPIO)”章节一起阅读&#xff0c;效果会更佳&#xff0c;特别是涉及到寄存器说明的部分。…