Codeforces Round#853 div2 A-C

news/2024/11/30 0:47:59/

Codeforces Round#853 div2 A-C

等了很久终于迎来了一场cf比赛,白天出去玩了一圈,晚上回来打比赛,这次只出了A,B题。C题思路很巧妙,赛时没做出来,看了大佬学习到了,还是很不错。

A.Serval and Mocha’s Array 签到
题意:这个题题目有点绕,看了十分钟才明白意思,就是给你一个数组,判断能否重新排列数组使得数组前两项的最大公约数是否小于等于2。
思路:数据范围小,直接暴力枚举判断即可。

void Showball(){int n;cin>>n;vector<int> a(n);for(int i=0;i<n;i++) cin>>a[i];int ok=0;for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){int g=gcd(a[i],a[j]);if(g<=2) {ok=1;break;}}}if(ok) cout<<"YES"<<endl;else cout<<"NO"<<endl;
}

B. Serval and Inversion Magic
题意:给你一个只含0和1的字符串,给你一个操作,可以将区间[L,R]之间的字符0变成1,1变成0。问你能否通过一次操作,将字符串变成回文串。
思路:因为我们只能够操作一段连续的区间。我们可以对比回文串对应的字符s[i]s[i]s[i]s[n−i−1]s[n-i-1]s[ni1]如果出现不相同,又相同,又不相同的情况,那么两端区间都需要操作,但是不连续,那么我们无法满足题意。所以进行标记判断这种情况即可。

void Showball(){string s,t;int n;cin>>n;cin>>s;if(s==t) {cout<<"YES"<<endl;return;}int ok=1;bool f1=false,f2=false;for(int i=0;i<n/2;i++){if(s[i]!=s[n-i-1]) f1=true;if(f1&&s[i]==s[n-i-1]) f2=true;if(f2&&s[i]!=s[n-i-1]) {ok=0;break;}}if(ok) cout<<"YES"<<endl;else cout<<"NO"<<endl;
}

C. Serval and Toxel’s Arrays 思维
题意:给你一个数组AiA_iAi,并且进行m次操作,每次操作都会将上一个数组中的第p个元素修改为v。得到新的数组。然后我们需要统计
所有AiA_iAiAjA_jAj数组之间不同元素个数之和。
思路:如果我们直接进行模拟,在暴力计算,无疑会超时。那么遇到这种题目我们就需要算贡献,算贡献是一种计数类问题的经典套路。对于本题,我们可以算出每个数对答案的贡献,我们知道一共会有m+1m+1m+1个数组,对于数xxx,我们假设它在这m+1m+1m+1个数组中出现的次数为cnt,那么就可以分为两种情况,第一种情况,计算的两个数组中都含x,那么x对答案的贡献是1,这种情况一共有Ccnt2=cnt∗(cnt−1)/2C_{cnt}^2=cnt*(cnt-1)/2Ccnt2=cnt(cnt1)/2种情况,对于计算的两个数组,一个含x另外一个不含x,那么他的贡献也是1,这种情况一种有cnt∗(m−cnt+1)cnt*(m-cnt+1)cnt(mcnt+1)种,对于计算的两个数组都不含x的情况,那么x没有贡献,则不用计算。
所以我们现在就只需要计算出每个数在所有数组中出现的次数,以及在每次操作时维护好这个次数即可。
我们可以开一个map去记录每个数出现的次数,一个比较好的思路就是一开始我们假定后面每个数都没有改变,那么每个数出现的次数都是m+1m+1m+1次,那么在第i次操作时,将a[p]a[p]a[p]变为了vvv,那么a[p]a[p]a[p]的次数就会减少,减少了多少呢,很明显在这次操作之后的数组中都暂时不在含有a[p]a[p]a[p],也就是m−i+1m-i+1mi+1个。所以mp[a[p]]−=(m−i+1)mp[a[p]]-=(m-i+1)mp[a[p]]=(mi+1),同理vvv这个数出现的次数自然就暂时增加了这么多。
最后带入公式计算即可,注意开long long。

void Showball(){int n,m;cin>>n>>m;vector<int> a(n);map<int,LL> mp;for(auto &it:a){cin>>it;mp[it]=m+1ll;}for(int i=1;i<=m;i++){int p,v;cin>>p>>v;mp[a[--p]]-=m-i+1;mp[v]+=m-i+1;a[p]=v;}LL ans=0;for(auto &[k,v]:mp){ans+=v*(v-1)/2ll+(m-v+1)*v;}cout<<ans<<endl;
}

http://www.ppmy.cn/news/28323.html

相关文章

【Java】Spring Boot 2 集成 nacos

【Java】Spring Boot 2 集成 nacos 官方文档&#xff1a;https://nacos.io/zh-cn/docs/quick-start-spring-boot.html 项目地址&#xff1a;https://gitee.com/codingce/codingce-leetcode/tree/master/%E9%9D%A2%E7%BB%8F/Java/Nacos pom 本次Spring Boot版本 2.2.6.RELEA…

顿悟日记(一)

目录2023年1月顿悟日记&#xff1a;2023年2月24日顿悟日记&#xff1a;2023年2月25日顿悟日记&#xff1a;2023年2月26日顿悟日记&#xff1a;顿悟的经历是如此的奇妙&#xff0c;且让人亢奋的事情。 2023年1月顿悟日记&#xff1a; 1.我是面向对象还是面向过程&#xff1f; …

性能测试流程

性能测试实战一.资源指标分析1.判断CPU是否瓶颈的方法2.判断内存是否瓶颈的方法3.判断磁盘I/O是否瓶颈的方法4.判断网络带宽是否是瓶颈的方法二.系统指标分析三.性能调优四.性能测试案例1.项目背景2.实施规划&#xff08;1&#xff09;需求分析&#xff08;2&#xff09;测试方…

【java web篇】Maven的基本使用以及IDEA 配置Maven

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

一起Talk Android吧(第五百零七回:图片滤镜ImageFilterView)

文章目录背景介绍功能介绍图片滤镜图片圆角图片缩放图片旋转图片平移各位看官们大家好&#xff0c;上一回中咱们说的例子是"如何调整组件在约束布局中的角度",这一回中咱们说的例子是" 图片滤镜ImageFilterView"。闲话休提&#xff0c;言归正转&#xff0c…

ChatGPT是如何训练得到的?通俗讲解

首先声明喔&#xff0c;我是没有任何人工智能基础的小白&#xff0c;不会涉及算法和底层原理。 我依照我自己的简易理解&#xff0c;总结出了ChatGPT是怎么训练得到的&#xff0c;非计算机专业的同学也应该能看懂。看完后训练自己的min-ChatGPT应该没问题 希望大牛如果看到这…

Vue(6)

文章目录1. 自定义指令1.1 函数式1.2 对象式1.3 自定义指令常见坑1.4 创建全局指令2. 生命周期2.1 引出生命周期2.2 分析生命周期2.3 总结3. 组件3.1 认识组件3.2 使用组件 (非单文件组件)3.3 全局组件3.4 组件的几个注意点3.5 组件的嵌套3.6 VueComponent 构造函数3.7 一个重要…

LeetCode第334场周赛

2023.2.26LeetCode第334场周赛 A. 左右元素和的差值 思路 前缀和后缀和 代码 class Solution { public:vector<int> leftRigthDifference(vector<int>& nums) {int n nums.size();vector<int> l(n), r(n), ans(n);for (int i 1; i < n; i )l[…