当前位置: 首页 > article >正文

【蓝桥每日一题]-前缀和与差分(保姆级教程 篇3)#涂国旗 #重新排序

目录

题目:涂国旗

 思路:

题目:重新排序

 思路:


题目:涂国旗

      

 思路:

乍一看好像没啥思路,但是我们需要涂最少的格子,所以要都尝试一下才行,也就是从上面开始白至少一行,蓝若干行,红至少一行。

     

那么其实我们看到只需要控制好两个分割线即可。上面都是白,中间都是蓝,最下面都是红。然后比较每种情况所需要的最少代价即可。

     

最好是使用一下前缀和优化一下,这样答案就可以O(1)速度输出。

怎么前缀和呢?我们设置w[i]表示前面i行都涂成w颜色需要的代价即可!

#include <iostream>
#include <string>
using namespace std;
int n,m;string s;
inline int check(char c)      //化二维前缀和为一维前缀和
{
	int tol=0;
	for(int i=0;i<m;i++)
		if(s[i]!=c)tol++;	
	return tol;	
}
int main()
{
	cin>>n>>m;int w[n+1]={0},r[n+1]={0},b[n+1]={0};int ans=100000;  //ans必须很大
	for(int i=1;i<=n;i++)
	{	cin>>s;
		w[i]=w[i-1]+check('W');
		r[i]=r[i-1]+check('R');
		b[i]=b[i-1]+check('B');
	}
	for(int i=1;i<n-1;i++)
		for(int j=i+1;j<n;j++)
		 ans=min(ans,w[i]+b[j]-b[i]+r[n]-r[j]);    //根据公式,遍历出最小的即可
		cout<<ans;
		return 0;
}

      

     

题目:重新排序

题意:对于一个长n的数组查询m次[l,r]区间,要想使所有查询和最大,我们就要排个序,现在就问排序后所以查询区间的总和相比原来可以增加多少?

       

思路:

我们只要关注哪个位置能重复加多少次即可,当然要让更大的数来重复加最多的次数,那么只需要统计有多少个位置可以各自重复加多少次。

     

当然暴力是过不去的。我们需要优化一下。

    
其实就是差分序列思想,先标记都那个地方加,哪个地方减,然后统一前缀和求出最终效果,这就是每个元素出现的次数,然后减去之前的和就行了
 

#include<bits/stdc++.h>     
using namespace std;      
typedef long long ll;
const int N = 1e6 + 5;
int a[N];
ll cnt[N];//前缀和数组,必须开long long
int diff[N];//定义差分数组diff
int n,m,l,r;
ll sum1=0, sum2=0;//原数组和新数组和
int main() {
    cin>>n;
    for(int i=1; i<=n; i++) cin>>a[i];
    cin>>m;
    while (m--) {
        cin>>l>>r;
        diff[l]++; //进行差分
        diff[r+1]--;
    }
    for (int i=1; i<=n; i++) { //利用差分数组计算前缀和cnt数组
        cnt[i]=cnt[i-1]+diff[i];
    }
    for (int i=1; i<=n; i++) sum1+=a[i]*cnt[i];
    sort(a+1, a+1+n); 
    sort(cnt+1, cnt+1+n);
    for (int i=1; i<=n; i++) sum2+=a[i]*cnt[i];
    cout << sum2-sum1<< endl;
    return 0;
}


http://www.kler.cn/news/109215.html

相关文章:

  • VBA宏查找替换目录下所有Word文档中指定字符串
  • leetcode-数组
  • 计算机网络基础二
  • MATLAB中mse函数用法
  • ✔ ★【备战实习(面经+项目+算法)】 10.29学习
  • 提高抖音小店用户黏性和商品销量的有效策略
  • Python 批量解压Zip文件
  • RabbitMQ初入门
  • PyCharm中文使用详解
  • <学习笔记>从零开始自学Python-之-常用库篇(十三)内置小型数据库shelve
  • TiDB 7.4 发版:正式兼容 MySQL 8.0
  • 探秘Spring的设计精髓,深入解析架构原理
  • AD9371 官方例程HDL详解之JESD204B RX侧格式配置及各层主要功能
  • 银河麒麟服务器版v4安装程序缺少依赖包,改为利用手机联网在线安装
  • Android 13.0 通过驱动实现禁用usb鼠标和usb键盘功能
  • 【数据结构】插入排序
  • C++标准模板(STL)- 类型支持 (类型特性,is_pointer,is_lvalue_reference,is_rvalue_reference)
  • pytest-yaml 测试平台-3.创建执行任务定时执行用例
  • RabbitMQ学习05
  • 网络滤波器/网络滤波器/脉冲变压器要怎样进行测试,一般要测试哪些参数?
  • 云计算概述笔记
  • 建筑能源管理(7)——建筑节能诊断内容
  • RabbitMQ基础
  • 华为OD机考算法题:寻找最大价值的矿堆
  • [毕设记录]@开题调研:一些产品
  • 分类预测 | Matlab实现KOA-CNN-LSTM-selfAttention多特征分类预测(自注意力机制)
  • [动态规划] (一) LeetCode 1137.第N个泰波那契数
  • 刀具磨损状态识别(Python代码,MSCNN_LSTM_Attention模型,初期磨损、正常磨损和急剧磨损分类,解压缩直接运行)
  • An Early Evaluation of GPT-4V(ision)
  • GORM GEN 生成代码如何自定义方法和表名