2024CSP-J模拟赛9————S12678

news2024/10/21 20:36:39

一,赛中得分

T1100
T2100
T350
T440
总分290

二,赛中概括  

T1T2较快过,T3T4骗了90分(意料之中,这么好骗分!!!)

三,题目解析

涂格子(paint)

问题描述

现在有一个 n 行 m 列的网格纸,一开始每个格子都是白色的。

现在你可以任意挑选恰好 x 行和 y 列,将挑选的整行(整列)上的每一个格子涂成黑色, 问剩下多少个格子是白色的。

输入格式

第一行为 n,m,x,y,含义如上所示。

输出格式

一行一个整数表示答案。

样例输入
5312
样例输出
4
数据分布
对于 60% 的数据:1≤n,m≤100
对于 100% 的数据:1≤n,m≤10^​9(1000000000)​​,1≤x≤n,1≤y≤m

较简单,一道数学题(不脑残就能过)

AC代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("paint.in","r",stdin);
	freopen("paint.out","w",stdout);
	long long n,m,x,y;
	cin>>n>>m>>x>>y;
	cout<<n*m-n*y-x*(m-y);//算出结果
	return 0;
}

数串串(aba)

问题描述

给定一个长度为 n 的字符串,求有多少个长度为 3 的子序列满足形如 ABA 的格式,即子序列中的第一个字母等于第三个字母,但它们都不等于第二个字母。

由不同位置的相同字符构成的子序列被认为是不同的子序列,见样例解释。

一个序列被称为字符串 s 的子序列,当且仅当该序列能仅通过 s 删除一部分字符得到。

输入格式

第一行一个正整数 n 表示字符串的长度。

第二行一个长度为 n 的字符串,保证字符串仅由小写英文字母构成。

输出格式

一行一个整数表示答案。

样例输入
7
abacabc
样例输出
9
样例解释

满足条件的子序列有 aba,aba,aca,aca,bab,bab,bcb,cac,cbc 共 9 个。

数据分布

对于 10% 的数据满足 n≤300 ;

对于 60% 的数据满足 n≤5×10​^4(50000)​​ ;

对于 100% 的数据满足 1≤n≤10^​6(1000000)​​ 。

不会的人可以先参考一下两道题:

题目大意:

给定一个字符串,请计算ac作为字符串子序列出现的次数

注意:字符串子序列指的是从最初字符串通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。例如,acfbdebcd都是abcdef的子序列,而cae并不是。
样例:
输入:
aaaccc
输出:

9

题目解析:

可以从前往后计算有多少个a,把每个c的地方出现了几个a加起来;也可以从后往前计算有多少个c,把每个a的地方出现了几个c加起来。

AC代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
	//freopen("acok.in","r",stdin);
	//freopen("acok.out","w",stdout);
	string a;
	cin>>a;
	int b=a.size(),cnt=0,ans=0;
	int c[b]={0};
	for(int i=0;i<b;i++){
		if(a[i]=='a'){
			ans++;
			
		}
		c[i]=ans;
		if(a[i]=='c')cnt+=c[i];
	}
	cout<<cnt;
	//fclose(stdin);
	//fclose(stdout);
	return 0;
}

扩展:输入长度和字符串,求里面有多少个cow。

思路:用枚举,循环在字符串中正序查找O左边C的个数,用枚举,循环在字符串中倒序查找O右边W的个数,把他们相乘,最后相加。
样例:
输入:
6

coowww

输出:

6

AC代码:
#include<bits/stdc++.h>
using namespace std;
long long c[100005],d[100005];
int main(){
	int n;
	cin>>n;
	string a;
	cin>>a;
	long long cnt=0,b=a.size();
	long long ans=0;
	for(int i=0;i<b;i++){
		if(a[i]=='C')ans++;
		c[i]=ans;
	}
	ans=0;
	for(int i=b-1;i>=0;i--){
		if(a[i]=='W')ans++;
		d[i]=ans;
	}
	for(int i=0;i<b;i++){
		if(a[i]=='O'){
			cnt+=c[i]*d[i];
		}
	}
	cout<<cnt;
	return 0;
}

与上面两道题的思路一样

AC代码
#include<bits/stdc++.h>
using namespace std;
long long n,b[1000006],c[1000006],cntt=0;
int main(){
	freopen("aba.in","r",stdin);
	freopen("aba.out","w",stdout);
	string a;
	cin>>n>>a;
	for(char i='a';i<='z';i++){
		memset(b,0,sizeof(b));
		memset(c,0,sizeof(c));
		long long ans=0,cnt=0,sum=0;
		for(int j=0;j<n;j++){
			if(a[j]==i)ans++;
			b[j]=ans;
		}
		for(int j=n-1;j>=0;j--){
			if(a[j]==i)cnt++;
			c[j]=cnt;
		}
		for(int j=0;j<n;j++){
			if(a[j]!=i){
				sum+=c[j]*b[j];
			}
		}
		cntt+=sum;
	}
	cout<<cntt;
	return 0;
}

取石子(pick)

问题描述

有 n 堆石头排成一行,第 i 堆中有 a​i​​ 颗石子,Alice 和 Bob 打算玩一个取石子的博弈游戏,他们为每堆石子赋予了一个权值 b​i​​,并规定一次操作为:选定一堆石子,从它本身和它前面的所有石子堆中各取走一颗。当前面有的石子堆中已经无石子的时候,不允许这样操作。对第 i 堆石子进行操作可以获得权值 b​i​​。每堆石子对应的操作只能做 11 次。

现在他们不想玩无趣的博弈游戏了,他们想知道如果他们不断进行这样的操作,直到没有任何操作可以进行,在最优情况下,一共能获得多少权值。

形式化来说:给定 n 长序列 a​1​​,a​2​​,⋯,a​n​​,一次操作为选定一个 x,使a​1​​,a​2​​,⋯,a​x​​ 均减少 1,但不允许选择会将某个 a​i​​ 减成负数的 x,操作完成之后获得权值 b​x​​,每种 x 最多只能被选定 1 次,求经过任意多次操作之后能获得的最大权值。

输入格式

第一行为石子堆数 n

第二行为 n 个整数 a​1​​,a​2​​,⋯,a​n​​

第三行为 n 个整数 b​1​​,b​2​​,⋯,b​n​​

输出格式

一行一个整数,可获得的最大权值和

样例输入
  1. 5
  2. 6 2 2 1 1
  3. 1 3 2 4 5
样例输出
  1. 9
样例解释

可以对第 1,2,5 堆石子分别进行一次操作,共获得权值 1+3+5=9,最后的石子堆情况为 3 0 1 0 0

数据分布

对于 100% 的数据,1≤n≤5000,1≤a​i​​≤10​^9(1000000000)​​,1≤b​i​​≤10^​5(100000)​​

对于 30% 的数据,有额外限制:1≤n≤20

对于另外 30% 的数据,有额外限制:对于所有的 i,b​i​​=1

动态规划

AC代码
#include<bits/stdc++.h>
using namespace std;
long long n,a[5005],b[5005],cnt=0,dp[5005][5005];
int main(){
	//freopen("pick.in","r",stdin);
	//freopen("pick.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
	}
	memset(dp,-1,sizeof(dp));
	for(int i=0;i<=n;i++){
		dp[0][i]=0;
	}
	for(int i=1;i<=n;i++){
		for(long long j=0;j<=n;j++){
			dp[i][min(a[i],j)]=max(dp[i][min(a[i],j)],dp[i-1][j]);
			
		}
		if(a[i]>0){
			for(long long j=1;j<=n;j++){
				if(dp[i-1][j]!=-1)dp[i][min(a[i]-1,j-1)]=max(dp[i-1][j]+b[i],dp[i][min(a[i]-1,j-1)]);
			}
		}
		
	}
	for(int i=0;i<=n;i++){
		cnt=max(cnt,dp[n][i]);
		
	}
	cout<<cnt<<endl;
	return 0;
}

健身计划(gym)

问题描述

Setsuna 想要运动!

于是她安排了 n 天内的作息,作息用一个 01 字符串 s 表示,若 s​i​​ 为 0 则表示这天休息,为 11 则表示这天要去健身房运动。

但是连续 x 天的运动会积累 ​​x(x+1)/2​​ 点疲劳值,也就是说字符串中每段长度为 x 的极长连续 1 会带来 ​​x(x+1)/2​​ 点疲劳值。

例如,若她的安排为 11101011 ,那疲劳值为 ​2​​3(3+1)​​+​2​​1(1+1)​​+​2​​2(2+1)​​=10 点。

现在她可以把任意天运动日改成休息日,问最少需要改几天才能使得疲劳值小于等于 k

输入格式

第一行包含两个整数 n,k 。

第二行包含一个长度为 n 的 01 串 s。

输出格式

输出一个整数,表示答案。

样例输入1
 
 
  1. 7 4
  2. 1110111
样例输出1
 
 
  1. 2
样例输入2
 
 
  1. 3 1
  2. 111
样例输出2
 
 
  1. 2
数据分布

对于 15% 的数据满足 n≤15 ;

对于 40% 的数据满足 n≤300 ;

对于 60% 的数据满足 n≤2000 ;

对于 100% 的数据满足 1≤n≤10​^5(100000)​​,0≤k≤​2​​n(n+1)​​ 。

优先队列

AC代码

#include<bits/stdc++.h>
using namespace std;
long long n,m,cnt=0,t=0;
long long pilao(long long x){
	return x*(x+1)/2;
}
long long cal(long long l,long long k){
	if(l<=k)return 0;
	l-=k;
	k++;
	return l%k*pilao(l/k+1)+(k-l%k)*pilao(l/k);
}
struct node{
	int len,k;
	node(int lenn=0,int kk=0){
		len=lenn;
		k=kk;
	}
	bool operator<(const node& p) const {
		long long x=cal(len,k)-cal(len,k+1);
		long long y=cal(p.len,p.k)-cal(p.len,p.k+1);
		return x<y;
	}
};
priority_queue<node> q;
int main(){


	//freopen("gym.in","r",stdin);
	//freopen("gym.out","w",stdout);
	int now=0;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		int x;
		scanf("%1d",&x);
		if(x)cnt++;
		if(!x||i==n){
			if(cnt){
				q.push(node(cnt,0));
				now+=pilao(cnt);
			}
			cnt=0;
		}
	}
	long long ans=0;
	while(now>m){
		ans++;
		node tmp=q.top();
		q.pop();
		now-=cal(tmp.len,tmp.k)-cal(tmp.len,tmp.k+1);
		q.push(node(tmp.len,tmp.k+1));
	}
	cout<<ans;
	return 0;
}

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

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

相关文章

客户案例 | Ansys与台积电和微软合作加速光子仿真

Ansys与台积电和微软展开合作&#xff0c;将硅光子器件的仿真和分析速度提高10倍以上 主要亮点 借助使用NVIDIA图形处理单元&#xff08;GPU&#xff09;的Microsoft Azure虚拟机&#xff0c;Ansys Lumerical™ FDTD 3D电磁仿真的光子器件仿真速度实现了10倍提升 凭借Azure云…

零基础Java第八期:一维数组(1)

目录 一、 一维数组的基本概念 1.1. 什么是数组 1.2. 数组的创建及初始化 1.3. 数组的使用 二、数组是引用类型 2.1. 初始JVM的内存分布 2.2. 基本类型变量与引用类型变量 2.3. 引用变量的理解 2.4. null 三、数组的应用场景 3.1. 作为函数的参数 3.2. 作为函数的返…

【数据结构】顺序表与链表的区别和各自特点

顺序表与链表的区别 一、结构上二、使用上随机访问在随机位置插入删除空间利用率缓存利用率 应用场景 一、结构上 顺序表&#xff1a; 顺序表的内核是一个数组&#xff0c;所以顺序表在逻辑上&#xff0c;和在物理上都是线性的。 链表&#xff1a; 链表是通过一个个独立的空间…

Linux性能调优之使用BPF工具观测CPU性能指标

写在前面 博文内容涉及工具来自《BPF Performance Tools》 一书&#xff0c;CPU性能指标涉及&#xff1a; 系统短期创建的线程进程跟踪进程线程的CPU运行时长&#xff0c;脱离时长统计线程的运行队列长度&#xff0c;等待延时时间&#xff0c;有多少线程在等待&#xff0c;多核…

python语言入门必须要学习的模块化编程案例游戏---画图案例(三)【源码大全】

彩虹五角星 import turtle #引用turtle库 q turtle.Pen() #构造画笔 turtle.bgcolor("black") …

java基于SpringBoot+Vue+uniapp微信小程序的自助点餐系统的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

(悬臂)梁结构固有频率理论求解

文章目录 0、背景1、梁固有频率的理论解法1.1 简支梁和悬臂梁1.2 其他支撑形式的梁2、支座带旋转弹簧的悬臂梁固有频率求解3、算例及仿真0、背景 为了给风电塔筒结果的ABAQUS模型中添加支座弹簧,需要先搞清楚ABAQUS中弹簧单元的性质。很遗憾,网络上关于土弹簧的资料很少,帮…

【Linux】从 fork() 到 exec():理解 Linux 进程程序替换的魔法

1.前言 进程程序替换是指一个进程用另一个新的可执行程序来替换当前正在执行的程序&#xff0c;这个过程通过通过exec系列函数完成。在Linux或UNIX系统中&#xff0c;进程程序替换通常发生在一个进程通过fork()创建了子进程之后&#xff0c;子进程用exec()函数加载和执行另一个…

HTTP(HyperText Transfer Protocol)协议

前言 HTTP作为应用层协议&#xff0c;定义了客户端与服务器之间的通信规则&#xff0c;使得浏览器或其他客户端程序能够请求并获取Web服务器上的超文本信息。 在分布式、协作式的超媒体信息系统中&#xff0c;HTTP协议扮演着核心角色&#xff0c;它支持了信息的组织、检索和呈现…

ChatGPT01-preivew体验报告:内置思维链和多个llm组合出的COT有啥区别呢?丹田与练气+中学生物理奥赛题测试,名不虚传还是名副其实?

一个月前&#xff0c;o1发布的时候&#xff0c;我写了篇文章介绍 逻辑推理能力堪比博士生&#xff0c;OpenAI发布全新AI模型系列&#xff1a; o1 - 大模型或许进入新阶段&#xff0c;还翻译了官方的介绍 解密OpenAI o1是如何让LLMs获得逻辑推理能力的 - CoT * RL&#xff0c;也…

Ribbon客户端负载均衡策略测试及其改进

文章目录 一、目的概述二、验证步骤1、源码下载2、导入IDE3、运行前修改配置4、策略说明5、修改策略 三、最终结论四、改进措施1. 思路分析2. 核心代码3. 测试页面 一、目的概述 为了验证Ribbon客户端负载均衡策略在负载节点失效的情况下&#xff0c;是否具有故障转移的功能&a…

学习 UE5 的一些前置操作总结

随着 Unity, Godot 这些引擎都玩抽象&#xff0c;主动捅自己一刀后&#xff0c;UE5 的风头不可谓不盛&#xff0c;本着多学一点免得失业的思路方针&#xff0c;咱也研究了一下 UE5 引擎&#xff0c;然后发现想要开始使用 UE5 &#xff0c;包含了很多前置操作&#xff0c;这里总…

Java项目-基于springboot框架的家具商城系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

使用Yolov10和Ollama增强OCR

1. 训练自定义 Yolov10 数据集 利用物体检测增强 OCR 的第一步是在数据集上训练自定义 YOLO 模型。YOLO&#xff08;只看一遍&#xff09;是一种功能强大的实时对象检测模型&#xff0c;它将图像划分为网格&#xff0c;使其能够在一次前向传递中识别多个对象。这种方法非常适合…

AI大模型开发架构设计(14)——基于LangChain大模型的案例架构实战

文章目录 基于LangChain大模型的案例架构实战1 LangChain 顶层架构设计以及关键技术剖析LangChain 是什么?LangChain的主要功能是什么&#xff1f;LangChain 顶层架构设计LangChain 典型使用场景&#xff1a;QA 问答系统LangChain 顶层架构设计之 Model I/OLangChain 顶层架构…

No.17 笔记 | XXE漏洞:XML外部实体注入攻击

1. XXE漏洞概览 XXE&#xff08;XML External Entity&#xff09;是一种允许攻击者干扰应用程序对XML输入处理的漏洞。 1.1 XXE漏洞比喻 想象XML解析器是一个听话的机器人&#xff0c;而XXE就是利用这个机器人的"过分听话"来获取不应该获取的信息。 1.2 XXE漏洞危…

基于SSM汽车零部件加工系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;员工管理&#xff0c;经理管理&#xff0c;零件材料管理&#xff0c;产品类型管理&#xff0c;产品信息管理&#xff0c;产品出库管理&#xff0c;产品入库管理 员工账号功能包括&#xff1a;系统首页…

spring-cloud-alibaba-nacos-config2023.0.1.*启动打印配置文件内容

**背景&#xff1a;**在开发测试过程中如果可以打印出配置文件的内容&#xff0c;方便确认配置是否准确&#xff1b;那么如何才可以打印出来呢&#xff1b; spring-cloud-alibaba-nacos-config 调整日志级别 logging:level:com.alibaba.cloud.nacos.configdata.NacosConfigD…

Java爬虫:获取商品销量详情API返回值的实战指南

在数字化时代&#xff0c;数据已成为电商运营的核心。商品销量数据不仅反映了市场的需求和趋势&#xff0c;还能为商家提供决策支持。通过Java爬虫技术&#xff0c;我们可以高效地获取这些数据&#xff0c;从而深入分析商品的市场表现。 为何选择Java爬虫获取销量数据 自动化处…

股票与基金资料收集

声明&#xff1a;本内容是网上资料的收集与整理而成&#xff0c;不定时更新。仅供参考&#xff0c;不构成任何投资建议。 目录&#xff1a; 一、股票 1、黄金交叉和死亡交叉 2、技术指标 3、T、TR、THR含义 二、基金 平准基金 一、股票 1、黄金交叉和死亡交叉 “黄金交…