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://www.mzph.cn/web/49405.shtml

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

相关文章

MySQL中不等于筛选时会漏掉null值的问题

一、问题描述 MySQL中使用不等于进行筛选数据时&#xff0c;若筛选值为null&#xff0c;则该条数据不会被选中&#xff0c;如何解决该问题&#xff1f; 表示不等于的方式如下&#xff1a; ! <> not in二、案例验证 1、创建数据表 -- ---------------------------- -…

【2024最新版】Stable diffusion汉化版安装教程(附SD安装包),一键激活,永久免费!

目前广泛使用的Stable Diffusion Web UI简称(SDWebUI)是发布在开源平台Github上的一个Python项目,与通常的软件安装方法不同,这个项目并不是下载并安装即可使用的应用程序,而是需要准备执行环境,编译源码. 如果你是一个新手不会安装,现在可以直接使用一键启动包. 例如:国内的…

AI驱动的在线面试系统:技术革新与初步面试的新体验

一、引言 在数字化和智能化的时代背景下&#xff0c;人工智能&#xff08;AI&#xff09;技术正日益渗透到各行各业&#xff0c;为人们的生活和工作带来前所未有的变革。其中&#xff0c;AI驱动的在线面试系统&#xff0c;凭借其高效、便捷、公正等特性&#xff0c;逐渐成为企业…

ATF-541M4全解析(一)

目录 一、描述二、规格三、各参数最大值四、25℃下的典型值 一、描述 安华高科技 (Avago Technologies) 的 ATF-541M4 是一款高线性度、低噪声、单电源供电的E-PHEMT&#xff0c;封装在一个微型无引脚封装中。 ATF-541M4 的小尺寸和低外形使其非常适合用于混合模块和其他空间…

matplotlib 画图函数,最常用的

并排显示2个图片 import os import numpy as np from PIL import Image import matplotlib.pyplot as pltimage1 Image.open(a.png) image2 Image.open(a2.png)# Create a figure with two subplots (1 row, 2 columns) fig, axes plt.subplots(1, 2, figsize(10, 5))# Di…

【Git-驯化】一文搞懂git中rm命令的使用技巧

【Git-驯化】一文搞懂git中rm命令的使用技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档关注&#xff1a;微信公…

git学习笔记(总结了常见命令与学习中遇到的问题和解决方法)

前言 最近学习完git&#xff0c;学习过程中也遇到了很多问题&#xff0c;这里给大家写一篇总结性的博客&#xff0c;主要大概讲述git命令和部分难点问题&#xff08;简单的知识点这里就不再重复讲解了&#xff09; 一.git概述 1.1什么是git Git是一个分布式的版本控制软件。…

【推研小灶】复旦与南大之间:一次独特的计算机保研之旅

写在前面 上午10点填完志愿等待复试通知&#xff0c;利用这段时间记录一下我简短的夏令营和预推免。今年变为线下之后&#xff0c;部分学校的入营情况、考核方式有明显变化。加上CS方向保研名额总体变多&#xff0c;形势有点小乱&#xff0c;甚至填报系统都在9.29中秋节当天&a…

嵌入式C++、Raspberry Pi、LoRa和Wi-Fi技术、TensorFlow、ROS/ROS2:农业巡检数据导航机器人设计流程(代码示例)

随着科技的不断进步&#xff0c;农业领域也在逐渐向智能化发展。农业巡检机器人作为农业智能化的重要组成部分&#xff0c;能够自动化地监测农作物生长状况&#xff0c;提高农业管理的效率和精确度。本文将介绍一个基于Raspberry Pi和NVIDIA Jetson的农业巡检机器人&#xff0c…

【我的养猪日记】区块链游戏

剧情介绍 年少无知留给了故乡&#xff0c;谦卑有礼送给了远方&#xff0c;有工作的地方没家&#xff0c;有家的地方没工作&#xff0c;他乡留不下灵魂&#xff0c;故乡安不了肉身&#xff0c;从此便有了漂泊。在外漂泊数年的你每天过着&#xff0c;挤不完的公交地铁、交不完的房…

VUE3学习第三篇:报错记录

1、在我整理好前端代码框架后&#xff0c;而且也启动好了对应的后台服务&#xff0c;访问页面&#xff0c;正常。 2、报错ReferenceError: defineModel is not defined 学到这里报错了 在vue网站的演练场&#xff0c;使用没问题 但是在我自己的代码里就出问题了 3、watchEffec…

网友提问:桌面与web开发哪个难度更大?

关于桌面应用开发与Web开发哪个难度更大的问题&#xff0c;实际上并没有绝对的答案&#xff0c;因为这取决于具体的开发任务、所使用的工具和技术栈等因素。不过&#xff0c;我们可以从几个方面来进行比较&#xff1a; 技术栈 Web开发&#xff1a; 前端通常涉及到HTML、CSS、J…

用Python编写自动答题脚本——该如何写呢?

编写一个Python自动答题脚本的复杂性和方法将取决于你所要答题的系统的具体实现和限制。以下是一个简化的流程&#xff0c;以及如何在不同情境下编写自动答题脚本的基本思路。 1. 确定答题系统的交互方式 首先&#xff0c;你需要了解答题系统是如何与用户交互的。这可能包括&…

Django—admin后台管理

Django官网 https://www.djangoproject.com/ 如果已经有了Django跳过这步 安装Django&#xff1a; 如果你还没有安装Django&#xff0c;可以通过Python的包管理器pip来安装&#xff1a; pip install django 创建项目&#xff1a; 使用Django创建一个新的项目&#xff1a; …

[Mysql-DDL数据操作语句]

目录 DDL语句操作数据库 库&#xff1a; 查看&#xff1a;show 创建&#xff1a;creat 删除&#xff1a;drop 使用(切换)&#xff1a;use 表&#xff1a; 查看&#xff1a;desc show 创建&#xff1a;create 表结构修改 rename as add drop modify change rename as …

探索Linux-1-虚拟机远程登陆XShell6远程传输文件Xftp6

Linux是什么&#xff1f; Linux是一个开源的操作系统内核&#xff0c;由林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;于1991年首次发布。它基于Unix操作系统&#xff0c;但提供了更多的自由和灵活性。Linux内核是操作系统的核心部分&#xff0c;负责管理系统资源、处理…

MySQL的表,视图,索引创建

一。创建表 1。创建Student表 mysql> create table Student(Sno int primary key auto_increment,Sname varchar(30) not null unique,Ssex varchar(2) check (Ssex 男 or Ssex 女) not null,Sage int not null,Sdept varchar(10) default 计算机 not null); 2.创建Cour…

Infuse Pro for Mac全能视频播放器

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件…

Dav_笔记11:SQL Tuning Overview-sql调优 之 5

构建SQL测试用例 对于许多与SQL相关的问题&#xff0c;获得可重现的测试用例可以更轻松地解决问题。从11g第2版&#xff08;11.2&#xff09;开始&#xff0c;Oracle数据库包含SQL测试用例构建器&#xff0c;它可以自动完成收集和复制尽可能多的有关问题及其发生环境的信息的难…

【JavaScript】深入理解 `let`、`var` 和 `const`

文章目录 一、var 的声明与特点二、let 的声明与特点三、const 的声明与特点四、let、var 和 const 的对比五、实战示例六、最佳实践 在 JavaScript 中&#xff0c;变量声明是编程的基础&#xff0c;而 let、var 和 const 是三种常用的变量声明方式。本文将详细介绍这三种变量声…