Codeforces 962 div3 A-F

news2024/9/8 22:57:01

A

题目分析

签到

 C++代码

#include<iostream>
using namespace std;
int main(){
	int t;
	cin>>t;
	while(t--){
		int n;
		cin>>n;
		cout<<n/4+n%4/2<<endl;
	}
}

B

题目分析

将n*n的方格分成若干个k*k的方格,每个k*k的方格中所有的数都相同

遍历每个k*k的第一个数即可,然后存入另一个(n/k)*(n/k)的数组中

 C++代码

#include<iostream>
using namespace std;
const int N=1010;
char g[N][N];
int n,k;
void solve(){
	cin>>n>>k;
	for(int i=1;i<=n;i++)scanf("%s",g[i]+1);
	char t[n/k+1][n/k+1];
	for(int i=1,cnt=1;i<=n;i+=k,cnt++){
		for(int j=1,cnt1=1;j<=n;j+=k,cnt1++){
			t[cnt][cnt1]=g[i][j];
		}
	}
	for(int i=1;i<=n/k;i++){
		for(int j=1;j<=n/k;j++)
			cout<<t[i][j];
		cout<<endl;
	}
}
int main(){
	int t;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

C

题目分析

设置两个数组预处理字符串a和b的字母出现次数的前缀和

sa[N][26]:sa[i][j]表示字符串a中第1~i个字符中字母(j+'a')出现的个数

sb[N][26]:sb[i][j]表示字符串b中第1~i个字符中字母(j+'a')出现的个数

用递推的方式更新sa和sb数组

之后处理询问就计算[l,r]中字符串a和字符串b出现的所有字母的个数之差,把它们都加起来,然后除以2就是答案了

 C++代码

#include<iostream>
using namespace std;
const int N=200010;
char a[N],b[N];
int n,q;
void solve(){
	scanf("%d%d",&n,&q);
	scanf("%s%s",a+1,b+1);
	int sa[n+5][26]={0},sb[n+5][26]={0};
	for(int i=1;i<=n;i++){
		sa[i][a[i]-'a']++;
		sb[i][b[i]-'a']++;
        //用i-1时的状态更新i的状态
		for(int j=0;j<26;j++){
			sa[i][j]+=sa[i-1][j];
			sb[i][j]+=sb[i-1][j];
		}
	}
	while(q--){
		int l,r,ans=0;
		scanf("%d%d",&l,&r);
		for(int i=0;i<26;i++){
            //a的[l,r]中字母i+'a'的个数和b的[l,r]中字母i+'a'的个数之差
			ans+=abs((sa[r][i]-sa[l-1][i])-(sb[r][i]-sb[l-1][i]));
		}
		printf("%d\n",ans/2);
	}
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		solve(); 
	}
	return 0;
}

D

题目分析

ab+ac+bc≤n,a+b+c≤x(a,b,c都大于等于1)

枚举三个数肯定是不可取的,那我们可以只枚举a和b两个数,然后判断c有几种选法,然后加入到答案中去就行

ab+ac+bc≤n => ab<n     a+b+c≤x => a+b<x

ab+ac+bc≤n =>c≤(n-ab)/(a+b)

a+b+c≤x => c≤x-a-b

所以:c ≤ min ((n-ab)/(a+b) , x-a-b)

 C++代码

#include<iostream>
using namespace std;
typedef long long LL;
void solve(){
	int n,x;
	cin>>n>>x;
	LL ans=0;
	for(int a=1;a<min(n,x);a++)
		for(int b=1;a*b<n&&a+b<x;b++){
            //总方案数加上当前情况下c可选的方案数
			ans+=min((n-a*b)/(a+b),x-a-b);
		}
	cout<<ans<<endl;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

E

题目分析

任意区间包含多少个符合条件的区间的转换成符合条件的区间被多少个区间包含

假设区间[i,j]符合条件,则包含该区间的区间有i*(n-j+1)个

字符串只包含0和1,要找的区间0和1一样多,所以我们可以把0变成-1,转换成要找区间和为0的区间

所以我们枚举每个区间的右端点,但是暴力找左端点肯定不行,所以要挖掘点性质

设置一个前缀和数组sum,

如果sum[i]==sum[j],则区间[i+1,j]的区间和为0,对答案的贡献为(i+1)*(n-j+1)

如果sum[k]==sum[j],则区间[k+1,j]的区间和为0,对答案的贡献为(k+1)*(n-j+1)

加起来就是(i+1+k+1)*(n-j+1)

由此可见,我们从前往后枚举每一个右端点j,找到在此之前的前缀和等于sum[j]的数,i+1就可以是区间的左端点,然后就可以用map存储每个相同前缀和对应的左端点的和

 C++代码

#include<iostream>
#include<vector>
#include<map> 
using namespace std;
typedef long long LL;
const int N=200010,mod=1e9+7; 
void solve(){
    string s;
    cin>>s;
    LL n=s.size();
    s=' '+s;
    vector<int> a(n+5),sum(n+5);
    for(int i=1;i<=n;i++)a[i]=(s[i]=='0'?-1:1);//0变成-1,1还是1
    for(int i=1;i<=n;i++)sum[i]=sum[i-1]+a[i];
    map<int,LL> mp;
    mp[0]=1;
    LL ans=0;
    for(int i=1;i<=n;i++){
    	ans+=mp[sum[i]]*(n-i+1)%mod;//以i为右端点的所有左端点的和为mp[sum[i]]
    	mp[sum[i]]+=(i+1);
	}
    cout<<ans%mod<<"\n";
}
int main(){
    int t;
    cin>>t;
    while(t--){
    	solve();
	}
    return 0;
}

F

题目分析

二分操作的数中最小的数

 C++代码

#include<iostream>
using namespace std;
typedef long long LL;
const int N=200010;
int a[N],b[N];
LL score[N],ans;
int n,k;
bool check(LL x){
	LL cnt=0,res=0,sumx=0;
	for(int i=1;i<=n;i++){
		LL t=(a[i]-x+b[i]-1)/b[i];//上取整,先把所有大于x的数都算上
		LL p=a[i]-t*b[i];//剩余的最大的数 
		if(t<0)continue;
		if(p&&p==x)sumx++;//剩余的最大的数为x,则x的个数加一 
		cnt+=t;//操作次数+t 
		res+=min(score[i],t*a[i]-(t-1)*t/2*b[i]);
	}
	if(cnt<=k)ans=max(ans,min(k-cnt,sumx)*x+res);
	return cnt<=k;
}
void solve(){
	cin>>n>>k;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++){
		cin>>b[i];
		LL t=a[i]/b[i];
		//score[i]表示靠第i个元素最多可以获得的分数 
		score[i]=a[i]%b[i]+t*a[i]-(t-1)*t*b[i]/2;
	}
	ans=0;
	//二分k次操作中获得的最少的一个分数 
	int l=0,r=1e18;
	while(l<r){
		LL mid=l+r>>1;
		if(check(mid))r=mid;
		else l=mid+1;
	}
	cout<<ans<<endl;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

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

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

相关文章

小主机SSD固态硬盘选购攻略,希捷酷鱼 530 SSD固态硬盘表现优秀【附系统无损迁移教程】

小主机SSD固态硬盘选购攻略&#xff0c;希捷酷鱼 530 SSD固态硬盘表现优秀【附系统无损迁移教程】 哈喽小伙伴们好&#xff0c;我是Stark-C~ 这几年随着以零刻为首的小主机市场的兴起&#xff0c;小主机相关的配置周边需求也是越来越大&#xff0c;就比如说SSD固态硬盘就是其…

爬虫程序在采集亚马逊站点数据时如何绕过验证码限制?

引言 在电商数据分析中&#xff0c;爬虫技术的应用日益广泛。通过爬虫技术&#xff0c;我们可以高效地获取大量的电商平台数据&#xff0c;这些数据对于市场分析、竞争情报、价格监控等有着极其重要的意义。亚马逊作为全球最大的电商平台之一&#xff0c;是数据采集的重要目标…

Nacos-微服务注册中⼼(Nacos简介 Nacos配置管理)

目录 一、 微服务的注册中⼼ 1. 注册中⼼的主要作⽤ 2. 常⻅的注册中⼼ 二、Nacos简介 nacos实战⼊⻔ 1. 搭建nacos环境 2.将订单微服务注册到nacos 2.1 在pom.xml中添加nacos的依赖 2.2 在主类上添加EnableDiscoveryClient注解 2.3 在application.yml中添加nacos服…

如何在Linux上构建Raspberry Pi虚拟环境

目录 前置环境需求 Older Version 新版本启动 下面我们来讲讲如何使用QEMU来仿照树莓派环境。这里首先先分成两大类。第一类是跑比较老的&#xff0c;安全性较低的老树莓派&#xff0c;主要指代的是22年4月份发布之前的版本&#xff0c;这个版本当中&#xff0c;树莓派镜像自…

Layui表格合并、表格折叠树

1、核心代码&#xff1a; let tableMerge layui.tableMerge; // 引入合并的插件&#xff0c;插件源文件在最后let tableData [{pid: 0,cid: 111,sortNum: 1, // 序号pName: 数据父元素1,name: 数据1,val: 20,open: true, // 子树是否展开hasChild: true, // 有子数据opt: 数据…

昇思25天学习打卡营第1天 | 快速入门教程

昇思大模型平台&#xff0c;就像是AI学习者和开发者的超级基地&#xff0c;这里不仅提供丰富的项目、模型和大模型体验&#xff0c;还有一大堆经典数据集任你挑。 AI学习有时候就像找不到高质量数据集的捉迷藏游戏&#xff0c;而且本地跑大数据集训练模型简直是个折磨&#xf…

react css module 不生效问题记录

背景&#xff1a;自己使用webpackreactcssless配置的项目框架&#xff0c;在使用过程中发现css module引入不生效。 import React from react import styles from ./index.module.less console.log(styles)//输出 undefinedwebpack配置了css-loader,less-loader,webpack默认cs…

Linux系统之dns服务配置

要求&#xff1a;DNS服务器域解析 www. 11zzj.com为192.168.11.1; ftp.11zzj.com 为192.168.11.2; mail.11zzj.com 为172.16.11.20; 1.打开Linux6&#xff08;服务器&#xff09;和Linux5&#xff08;客户端&#xff09; 配置IP地址和DNS 地址&#xff0c;并ping通。…

PSINS工具箱函数介绍——kfinit

kfinit是kf的参数初始化函数&#xff0c;用于初始化滤波参数 本文所述的代码需要基于PSINS工具箱&#xff0c;工具箱的讲解&#xff1a; PSINS初学指导基于PSINS的相关程序设计&#xff08;付费专题&#xff09; 使用方法 kfinit这个函数的字面意思是&#xff1a;kf的初始化…

游戏制作中没想明白的事情

当一个备忘录&#xff0c;有的是还没有时间去深入研究&#xff0c;或者没有从头了解 什么是建模绑定&#xff1f;为什么人物建模&#xff0c;初始化都是双手打开的&#xff1f;平着放武器&#xff0c;但运行的时候武器会自动竖起来&#xff0c;这是怎么做到的&#xff1f; 思…

嵌入式学习Day13---C语言提升

目录 一、二级指针 1.1.什么是二级指针 2.2.使用情况 2.3.二级指针与数组指针 二、指针函数 2.1.含义 2.2.格式 2.3.注意 2.4.练习 三、函数指针 3.1.含义 3.2.格式 3.3.存储 3.4.练习 ​编辑 四、void*指针 4.1.void缺省类型 4.2.void* 4.3.格式 4.4.注…

RocketMQ的详细讲解(四种mq的对比(activeMq、rabbitmq、rocketmq、kafka))

20240729 RocketMQ1 mq的三大作用 异步、削峰限流、解耦合2. 四种mq的对比&#xff08;activeMq、rabbitmq、rocketmq、kafka&#xff09;3 rocketmq特点1. 平台无关2. 能提供什么样的功能 4 rocketMq4.1 broker中的标题&#xff0c;来约束读和写4.2 rocketmq的结构4.3 读和写的…

AJAX概念与axios使用

一、什么是AJAX&#xff1f; 定义&#xff1a;AJAX 是异步的 JavaScript和XML(Asynchronous JavaScript And XML)。简单点说&#xff0c;就是使用XMLHttpRequest 对象与服务器通信。 它可以使用 JSON&#xff0c;XML&#xff0c;HTML 和 text 文本等格式发送和接收数据。AJAX最…

Java 内推 | 教育行业缺口来了,研发,运维,产品,教研,职能,营销... 别错过

Java 内推 | 教育行业缺口来了&#xff0c;研发&#xff0c;运维&#xff0c;产品&#xff0c;教研,职能&#xff0c;营销… 别错过 岗位职责&#xff1a; 1、根据公司战略及业务规划&#xff0c;参与部门业务架构分析与设计&#xff0c;包含规划立足当前、面向未来的应用架构…

嵌入式C++、STM32、ROS系统和MQTT协议通讯:智能农业灌溉系统项目设计思路(代码示例)

目录 项目概述 系统设计 硬件设计 软件设计 系统架构图 代码实现 1. STM32微控制器代码 1.1 STM32初始化代码 1.2 读取土壤湿度 1.3 MQTT数据发送 1.4 接收控制命令 1.5 主循环 2. ROS系统代码 2.1 创建ROS节点 2.2 控制水泵的逻辑 3. ROS与MQTT的集成 3.1 安…

MySQL 执行计划详解

文章目录 一. 概念二. 语法三. 详解各字段1. id2. select_type3. table4. partitions5. type6. possible_keys与key7. key_len8. ref9. rows10. filtered11. Extra 一. 概念 有了慢查询后&#xff0c;需要对慢查询语句进行分析。一条查询语句经过MySQL查询优化器后&#xff0c…

最全国内13家DNS分享 解决网页被恶意跳转或无法打开问题

腾讯 DNS (DNSPod) 腾讯 DNS 是由 DNSPod 提供的公共免费 DNS 服务。DNSPod 已被腾讯收购&#xff0c;现在属于腾讯公司所有。该 DNS 服务稳定性和连通性良好&#xff0c;经测试在海外也可以使用。 DNSPod 提供了 IPv4、IPv6 DNS 和 DoT/DoH 服务。 IPv4 地址: 119.29.29.29…

fastapi教程(五):中间件

一&#xff0c;什么是中间件 中间件是一种软件组件&#xff0c;它在请求到达应用程序处理程序之前和/或响应发送回客户端之前执行操作。 请求从客户端发出。 请求首先经过Middleware 1。 然后经过Middleware 2。 请求到达FastAPI路由处理器。 响应从路由处理器返回。 响应经过…

精品PPT | 云原生大数据平台构建及落地实践.pptx

1、监控和可观测性的关系及渊源 2、当前阶段落地可观测性的挑战在哪里 3、落地好一个可观测系统的三大要素 4、面向故障处理过程的可观测性体系建设案例 5、思考&#xff1a;人工智能2.0对可观测性技术和产品演进的影响

鸿蒙开发—黑马云音乐之Music页面

目录 1.外层容器效果 2.信息区-发光效果 3.信息区-内容布局 4.播放列表布局 5.播放列表动态化 6.模拟器运行并配置权限 效果&#xff1a; 1.外层容器效果 Entry Component export struct MuiscPage {build() {Column() {// 信息区域Column() {}.width(100%)// .backgroun…