首页 > 其他分享 >1.21练习

1.21练习

时间:2025-01-21 16:53:54浏览次数:1  
标签:int 代码 练习 long vector 差分 众数 1.21

原题地址https://www.luogu.com.cn/problem/P4552
这道题是一道差分的题目,刚开始的时候我想的是找数列中的众数,然后求大于众数的数和小于众数的数与众数的最大差,然后再将它们相加,但这样很显然不对。在看了题解的思路后发现这道题其实不难(我太笨了)。
首先这道题是说通过选定区间[l,r],使得区间内的数加一或减一,让所有数相同。于是我们可以先求该数组的差分,即b[0]=a[0],b[i]=a[i]-a[i-1]。
可以得到如下代码:

点击查看代码
    vector <i64> b (n); //i64是我define的long long,这题不开long long会爆
    b[0]=a[0];
    for(int i=1;i<n;i++){
		b[i]=a[i]-a[i-1];	
    }

然后就是使得数组全部相等,即它们的差分数组除了第一个剩下的值全为0。我们可以设立两个值p,q。如果b[i]>0则p+=b[i];b[i]<0则q-=b[i],最终max(p,q)就是操作次数,abs(p-q)+1(最少有一种结果)就是可能的操作结果。
就是:

点击查看代码
for(int i=1;i<n;i++){
	int b[i]=a[i]-a[i-1];
	if(b[i]>0) p+=b[i];
	else q-=b[i];
}

代码可以简化,不必建立差分数组。
最终代码如下:

点击查看代码
#include <bits/stdc++.h>
#define i64 long long
using namespace std;
int main() {
    int n;
    cin>>n;
    vector <i64> a (n+1);
	unordered_map<int,int> count;
    for(int i=0;i<n;i++){
		cin>>a[i];
		count[a[i]]++;
	}
	i64 p=0,q=0;
//    vector <i64> b (n);
//    b[0]=a[0];
//    for(int i=1;i<n;i++){
//		b[i]=a[i]-a[i-1];	
//    }
	for(int i=1;i<n;i++){
		int b=a[i]-a[i-1];
		if(b>0) p+=b;
		else q-=b;
	}
	cout<<max(p,q)<<endl<<abs(p-q)+1<<endl;
    return 0;
}

标签:int,代码,练习,long,vector,差分,众数,1.21
From: https://www.cnblogs.com/zwn1ow/p/18682330

相关文章

  • 1.21
    二分图判定染色法二分图匹配匈牙利算法增广路(augmentingpath)是始于非匹配点且终于非匹配点(除了起始的点)的交错路。增广路中边的数量是奇数。增广路中,原匹配边变为非匹配边,可得到更大匹配枚举每个左部点,遍历所有边:1、若有未匹配的右部点,则将此两点匹配。2、否则递归处理......
  • 团体程序设计天梯赛-练习集——L1-015 跟奥巴马一起画方块
    前言15分一道特别简单的题目,肥的流油,开一下吧L1-015跟奥巴马一起画方块美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一......
  • 团体程序设计天梯赛-练习集——L1-014 简单题
    前言简单题L1-014简单题这次真的没骗你——这道超级简单的题目没有任何输入。你只需要在一行中输出事实:Thisisasimpleproblem.就可以了。输入样例:无输出样例:Thisisasimpleproblem.太简单了这就是另一种形式的著名短句HelloWorld形式不变,接着看看......
  • 日记(练习)
    为了分别OI与日常,这里只会放些我认为比较好的题,其他题应当在学习笔记中。todolist多项式杂烩(doing)LCT?仙人掌(2024.9.18)一些较难的DP构造与ad-hoc博弈论(不会打表找规律):(推式子练习计算几何?PAM,广义SAMKummer定理2025.1.7在平面直角坐标系求......
  • LeetCode题练习与总结:下一个更大元素 Ⅲ -- 556
    一、题目描述给你一个正整数 n ,请你找出符合条件的最小整数,其由重新排列 n 中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正整数,则返回 -1 。注意 ,返回的整数应当是一个 32位整数 ,如果存在满足题意的答案,但不是 32位整数 ,同样返回 -1 。示例1:......
  • LeetCode题练习与总结:反转字符串中的单词 Ⅲ -- 557
    一、题目描述给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例1:输入:s="Let'stakeLeetCodecontest"输出:"s'teLekatedoCteeLtsetnoc"示例2:输入:s="MrDing"输出:"rMgniD"提示:1<=s.length<=5*10^......
  • 团体程序设计天梯赛-练习集——L1-011 A-B
    前言相对来说,这道题就比较简单了,但是这道题整整有20分呢,巨肥L1-011A-B本题要求你计算A−B。不过麻烦的是,A和B都是字符串——即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。输入格式:输入在2行中先后给出字符串A和B。两字符串的长度都不......
  • 2025.1.17 近期练习
    CF1286DLCC这个题还是比较简单的,考虑拆贡献,将所有碰撞情况拿出来考虑其出现的概率,显然只有相邻的。按照时间排序。假设我们钦定了\((i,i+1)\)这对碰撞为最先碰撞的,那么需要满足若干条件:例如若\(j\)向右,\(j+1\)不能向左等,因为限制只存在于相邻两位,我们可以考虑dp过去。......
  • SolidState通关手册---靶机练习
    SolidState靶机训练声明B站UP主泷羽sec笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。✍......
  • 编程练习:编写一个监听者模式类
    监听者模式(ObserverPattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系。当一个对象的状态发生变化时,所有依赖于它的对象都会收到通知并自动更新。这种模式非常适合用于事件驱动的系统,例如GUI框架、消息队列等。在本文中,我们将通过编写一个简单的监听者模式类 Obser......