Codeforces Round 962 (Div. 3)

链接

C题:

        思路:

        直接暴力求每个字母的前缀和,对于区间l,r的最小操作就是区间不同数的一半,因为可以把一个数变成另一个不一样的数,一下抵消两个。

#include<bits/stdc++.h>
using namespace std;
//#define int long long
typedef long long ll;
typedef pair<int,int> pii;
const int inf=0x3f3f3f3f;
const int N=2e5+10;
const int mod=1e9+7;
#define fi first
#define se secondint n,m;
int pre[N][30],nex[N][30];
void solve(){cin>>n>>m;string s,ss;cin>>s>>ss;s=' '+s;ss=' '+ss;for(int i=1;i<=n;i++){for(int j=0;j<=27;j++){pre[i][j]=pre[i-1][j];nex[i][j]=nex[i-1][j];}pre[i][s[i]-'a']++;nex[i][ss[i]-'a']++;}while(m--){int cnt=0;int l,r;cin>>l>>r;for(int i=0;i<=27;i++){cnt+=abs((pre[r][i]-pre[l-1][i])-(nex[r][i]-nex[l-1][i]));}int ans=cnt/2;cout<<ans<<endl;}
}
signed  main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t=1;cin>>t;while(t--){solve();}return 0;
}

D题

思路:

        abc有三种情况,一种是全相等,一种是两个相等,最后一种是全不相等。根据排列组合,第一种只有一种排列,第二种有三种排列,第三种有六种排列。

        对于第一种情况,我们直接暴力遍历一个数即可。第二种情况我们可以分两种情况考虑:1.不一样的数小于一样的数,2.不一样的数大于一样的数,我们直接暴力遍历这两种情况即可。第三种情况我们假定先找最小数,再找次小数,最后找最大数即可。

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> pii;
const int inf=0x3f3f3f3f;
const int N=1e5+10;
const int mod=1e9+7;
#define fi first
#define se second
#define ls u<<1
#define rs u<<1|1int n,x;
void solve(){cin>>n>>x;int cnt=0;if(x<3){cout<<0<<endl;return;}for(int i=1;3*i<=x&&i*i*3<=n;i++){cnt++;}for(int i=1;i*2<=x&&i*i<=n;i++){for(int j=1;i*2+j<=x&&j<i&&i*i+j*2*i<=n;j++){cnt+=3;}for(int j=i+1;i*2+j<=x&&j<=x&&i*i+j*2*i<=n;j++){cnt+=3;}}for(int i=1;i*3<=x&&i*i*3<=n;i++){for(int j=i+1;i*2+j<=x&&i*i*2+j*j<=n;j++){for(int k=j+1;i+j+k<=x&&i*j+i*k+k*j<=n;k++)cnt+=6;}}cout<<cnt<<endl;
}
signed  main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t=1;cin>>t;while(t--){solve();}return 0;
}

E题

思路:

        由于要知道区间个数,我们很容易想到要前缀和。我们另1为+1,0为-1,那么前缀和差为0的区间就是01数量一样的区间。我们很容易想到用一个vector来存sub的值,那么我们枚举左端点的时候,只需要去同样sub的位置去找即可。会有0101010101...这种情况,容易知道这样肯定是超时的。

        但我们一般都是找到暴力的方法然后再找方法优化,这题也是这样。

        如果我们找到的一对数为(x,y),根据分步乘法原理,容易知道这样的贡献是x*(n-y+1)。我们让x不动,去找所有右端点,也就是之前超时的暴力遍历sub。我们可以发现每次都是l*(n-xi+1)作为增加的贡献。我们可以发现 l 在我们遍历这次的时候是定值,n和1也是定值,我们都可以提取出来。假如后面满足条件的右端点有k个,那么以 l 为左端点的贡献就是 l*(k*n+k-\sum xi)。对于k我们可以二分查找下标容易求,然后对于后面那求和部分我们很容易发现是一个后缀和,而后缀和又可以看成总和减去前缀和,所以我们去维护每个sub的前缀和,这样我们就可以log的时间求出以 l 为左端点的贡献了。

tle代码:

string s;
int pre[N];
map<int,vector<int> > v;
void solve(){cin>>s;s=' '+s;v.clear();int n=s.size()-1;for(int i=1;i<=n;i++){pre[i]=pre[i-1];if(s[i]=='1')pre[i]++;v[pre[i]-(i-pre[i])].push_back(i);}int cnt=0;for(int i=1;i<=n;i++){int sub=pre[i-1]-(i-1-pre[i-1]);for(auto &x:v[sub]){if(x>i){cnt=(cnt+(i)*(n-x+1))%mod;}}}cout<<cnt<<endl;
}

优化代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> pii;
const int inf=0x3f3f3f3f;
const int N=2e5+10;
const int mod=1e9+7;
#define fi first
#define se secondstring s;
int pre[N];
map<int,vector<int> > v;
map<int,vector<int> > vv;
void solve(){cin>>s;s=' '+s;v.clear();vv.clear();int n=s.size()-1;set<int> p;for(int i=1;i<=n;i++){pre[i]=pre[i-1];if(s[i]=='1')pre[i]++;v[pre[i]-(i-pre[i])].push_back(i);p.insert(pre[i]-(i-pre[i]));}for(auto &x:p){int sum=0;for(int i=0;i<v[x].size();i++){sum+=v[x][i];vv[x].push_back(sum);}}int cnt=0;for(int i=1;i<=n;i++){int sub=pre[i-1]-(i-1-pre[i-1]);if(v[sub].size()==0) continue;int p=lower_bound(v[sub].begin(),v[sub].end(),i+1)-v[sub].begin();int pp=v[sub].size()-1;int t=0;if(p>0) t=vv[sub][pp]-vv[sub][p-1];else t=vv[sub][pp];cnt=(cnt+i*(-t+(pp-p+1)*n+(pp-p+1)))%mod;}cout<<cnt<<endl;
}
signed  main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t=1;cin>>t;while(t--){solve();}return 0;
}

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

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

相关文章

苹果CMS V10萌芽采集插件Pro v10.7.3

苹果CMS V10萌芽采集插件Pro v10.7.3 插件下载:萌芽采集插件Pro v10.7.3.zip 使用说明: 将addons文件和static文件放到你苹果cms程序的根目录并覆盖&#xff0c; 在登录后台在应用-应用市场启用。http://你的域名/admin.php/admin/mycj/union.html

等保测评练习卷19

等级保护初级测评师试题19 姓名&#xff1a; 成绩&#xff1a; 判断题&#xff08;10110分&#xff09; 1.为了有效处理等级保护对象运行过程中可能发生的重大安全事件&#xff0c;需要在统一的框架下制定针对不同安全事件的应急预…

FPGA开发——呼吸灯的设计

一、原理 呼吸灯的原理主要基于‌PWM&#xff08;脉冲宽度调制&#xff09;技术&#xff0c;通过控制LED灯的占空比来实现亮度的逐渐变化。这种技术通过调整PWM信号的占空比&#xff0c;即高电平在一个周期内所占的比例&#xff0c;来控制LED灯的亮度。当占空比从0%逐渐变化到1…

java计算机毕设课设—记账管理系统(附源码和安装视频)

这是什么系统&#xff1f; java计算机毕设课设—记账管理系统&#xff08;附源码和安装视频&#xff09; 记账管理系统主要用于财务人员可以从账务中判断公司的发展方向。对个人和家庭而言&#xff0c;通过记账可以制定日后的 消费计划&#xff0c;这样才能为理财划出清晰合理…

C++初学者指南-6.函数对象--lambdas(基础)

C初学者指南-6.函数对象–lambdas(基础) 文章目录 C初学者指南-6.函数对象--lambdas(基础)提醒:函数类和对象Lambdas变量捕获保存闭包通用Lambdas (C14)广义捕获 (C14)相关内容 幻灯片 提醒:函数类和对象 类至少提供一个operator () (…) {…} 函数能像一个函数一样被调用可以…

Nginx制作下载站点

使用nginx制作一个类似nginx官网的下载站点 如何制作一个下载站点,首先需要ngx_http_autoindex_module模块 该模块处理以斜杠(“/”)结尾的请求&#xff0c;并生成目录列表。 nginx编译的时候会自动加载该模块&#xff0c;但是该模块默认是关闭的&#xff0c;需要使用下来指令…

苦学Opencv的第九天:模板匹配

Python OpenCV入门到精通学习日记&#xff1a;模板匹配 前言 模板匹配是一种最原始、最基本的识别方法&#xff0c;可以在原始图像中寻找特定图像的位置。模板匹配经常应用于简单的图像查找场景中&#xff0c;例如&#xff0c;在集体合照中找到某个人的位置。 #mermaid-svg-N…

一个网站的js与cookie,页面缓存清理方案

浏览器在使用过程中会产生大量的缓存&#xff0c;Edge浏览器如何清理缓存&#xff1f;下面是Edge浏览器清理缓存的操作步骤。 页面缓存清理方案 打开开发者模式点击应用程序 按顺序点击即可 js缓存问题分析 修改完 js文件中的代码后&#xff0c;页面刷新好几次并没有重新加载…

软件测试---Linux

Linux命令使用&#xff1a;为了将来工作中与服务器设备进行交互而准备的技能&#xff08;远程连接/命令的使用&#xff09;数据库的使用&#xff1a;MySQL&#xff0c;除了查询动作需要重点掌握以外&#xff0c;其他操作了解即可什么是虚拟机 通过虚拟化技术&#xff0c;在电脑…

Leetcode—263. 丑数【简单】

2024每日刷题&#xff08;147&#xff09; Leetcode—263. 丑数 实现代码 class Solution { public:bool isUgly(int n) {if(n < 0) {return false;}for(const int prime: {2, 3, 5}) {while(n % prime 0) {n / prime;}}return n 1;} };运行结果 之后我会持续更新&#…

区块链在艺术市场中的创新:数字艺术品的溯源与版权保护

随着数字技术的迅猛发展&#xff0c;数字艺术品正逐渐成为艺术市场的重要组成部分。然而&#xff0c;数字艺术品的复制和版权问题日益突出&#xff0c;传统的版权管理方式面临挑战。区块链技术作为一种去中心化的分布式账本技术&#xff0c;为解决这些问题提供了新的可能性。本…

AJAX-XMLHttpRequest 详解

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 前言 XMLHttpRequest 概述 主要用途 工作流程 示例代码 GET 请求示例 POST 请求示例 注意事项 工作…

Hive3:Centos7环境部署Hive服务

一、安装说明 1、Hadoop集群情况 3台机器&#xff1a;4G2C、2G2C、2G2C 安装教程&#xff1a;Centos7环境安装Hadoop集群 2、安装MySQL&#xff0c;用于存储Hive的元数据 在102机器上安装MySQL 安装MySQL使用服务器的root账号 3、最后安装Hive 安装hive过程使用服务器的atgu…

如何录制电脑内部声音?全方位介绍电脑录音软件:8款在线录音!(2024重新整理)

如何录制电脑内部声音&#xff1f;不管是娱乐圈还是现实生活&#xff0c;【录音】这个功能的重要性不言而喻。而电脑录音已在影视配音、音视频剪辑、会议记录、在线教育等多个领域发光发热&#xff01; 本文将为您推荐8款电脑录音软件&#xff0c;并详细介绍电脑录音的多种方式…

Redis-jenkins

1. 什么是jenkins Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 2. 为什么使用jenkins 使用 Jenkins之前使用 Jenkins之…

深度解析Linux-C——函数和内存管理

目录 函数指针&#xff1a; 指针函数&#xff1a; 参数为指针的函数&#xff1a; 参数为数组的函数&#xff1a; C语言内存管理 stdlib.h头文件常用函数介绍 1、局部变量 2、全局变量 3、 堆空间变量 4、静态变量 5、常量 函数指针&#xff1a; 指向函数的指针&#…

鸿蒙APP架构及开发入门

1.鸿蒙系统 1.1 什么是鸿蒙 鸿蒙是一款面向万物互联时代的、全新的分布式操作系统。 在传统的单设备系统能力基础上&#xff0c;鸿蒙提出了基于同一套系统能力、适配多种终端形态的分布式理念&#xff0c;能够支持手机、平板、智能穿戴、智慧屏、车机、PC、智能音箱、耳机、…

《程序猿入职必会(4) · Vue 完成 CURD 案例 》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

lua 游戏架构 之 游戏 AI (九)ai_mgr Ai管理

定义ai_mgr的类&#xff0c;用于管理游戏中实体的AI组件。 先定义 AI行为枚举和优先级&#xff1a; lua 游戏架构 之 游戏 AI &#xff08;八&#xff09;ai_tbl 行为和优先级-CSDN博客https://blog.csdn.net/heyuchang666/article/details/140712839?spm1001.2014.3001.55…

天工三维实景建软件 GodWork 3D 7.24 软件下载License使用

1、天工三维实景建软件GodWork 3D 7.24,城市级实景三维数据生产面临大数据量空三稳定解算的难题。受限于目前主流软件的解算能力与效率&#xff0c;生产单位常采用分块处理方法&#xff0c;接边处精度需要有足够的控制点来保证&#xff0c;这增加了外业布设控制点与内业的工作量…