蓝桥每日一题 (差分)3月3号

//3279改变数组元素

自己做TLE:奈何想不出怎么用差分

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
//3279 改变数组元素(超时)
const int N=2e5+10;
vector<int>a;
int t,n;
int main()
{
   cin>>t;
   while(t--)
   {
       cin>>n;
       for(int i=0;i<n;i++)
       {
           int b;
           cin>>b;
           a.push_back(0);
           int idx=a.size()-1;
           while(idx>=0&&b--)
           {
               a[idx--]=1;
           }
       }
       for(int i=0;i<a.size();i++)cout<<a[i]<<" ";
       cout<<endl;
       a.clear();
   }
}

y的做法:根据本题特点,不去纠结中间具体加了多少,利用差分,只关心左右边界;最后巧妙地用!!来进行强制类型转换,输出0,1;(太厉害了)

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
//3279 改变数组元素
const int N=2e5+10;
int a[N];
int t,n;
int main()
{
   cin>>t;
   while(t--)
   {
       cin>>n;
       memset(a,0,(n+1)*4);
       //看来差分普遍用1开头
       for(int i=1;i<=n;i++)
       {
           //i有一层意思:i为几,数组上就有几个数
           int m;
           cin>>m;
           m=min(m,i);
           //确定要在(l,r)区间上加数
           int r=i,l=i-m+1;
           a[r+1]--,a[l]++;
       }
       for(int i=1;i<=n;i++)a[i]+=a[i-1];
       for(int i=1;i<=n;i++)cout<<!!a[i]<<" ";
       cout<<endl;



   }
}

//797. 差分

开始自己写的时候,把a看成差分了(不该犯)

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
//797 差分(自己做最开始把a看做差分数组了)
const int N=1e5+10;
int a[N];
int n,m;
int b[N];//我们最后求的还是a的状态,所以一定不要直接对a进行操作
//要先求差分数组
int main()
{
   cin >>n>>m;
   for(int i=1;i<=n;i++)
   {
       cin>>a[i];
       b[i]=a[i]-a[i-1];
   }
   while(m--)
   {
       int l,r,c;
       cin>>l>>r>>c;
       b[l]+=c;
       b[r+1]-=c;
   }
   for(int i=1;i<=n;i++)b[i]+=b[i-1],cout<<b[i]<<" ";

}

//798差分矩阵

((^-^)V一次做对)

做的时候还是差点忘了差分,一定要分清a数组和s数组的关系,a是s的差分,s是a的前缀和

在矩阵中:给出p二维数组,求其差分数组f;可以反着理解,f数组进行求前缀和之后是p数组。

也就是p数组是s数组,s数组是由(i-1,j)(i,j-1)(i-1,j-1)计算得到的。减去就好啦。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
//789 差分矩阵
const int N=1e3+10;
int f[N][N];
int p[N][N];
int n,m,q;
int main()
{
   cin >>n>>m>>q;
   //原始数组
   for(int i=1;i<=n;i++)
   {
       for(int j=1;j<=m;j++)
       {
           cin>>p[i][j];
       }
   }
  //求解差分数组
   for(int i=1;i<=n;i++)
   {
       for(int j=1;j<=m;j++)
       {
          f[i][j]=p[i][j]-p[i][j-1]-p[i-1][j]+p[i-1][j-1];
       }
   }
   while(q--)
   {
       int x1,x2,y1,y2,c;
       cin>>x1>>y1>>x2>>y2>>c;
       f[x1][y1]+=c;
       f[x1][y2+1]-=c;
       f[x2+1][y1]-=c;
       f[x2+1][y2+1]+=c;
   }
   //求前缀和
   for(int i=1;i<=n;i++)
   {
       for(int j=1;j<=m;j++)
       {
           f[i][j]+=f[i][j-1]+f[i-1][j]-f[i-1][j-1];
           cout<<f[i][j]<<" ";
       }
       cout<<endl;
   }

}
相关推荐
繁星蓝雨15 分钟前
C++设计原理———多重继承(虚基类、菱形继承、委托、重命名、基类和成员初始化)
c++·委托·多重继承·mi·显式初始化列·虚基类·对象布局
lisw0516 分钟前
互联网上的数据结构可视化!
数据结构·信息可视化
旖旎夜光1 小时前
【C++ 基础入门】命名空间、输入输出、缺省参数与函数重载
开发语言·c++·笔记·学习
扶尔魔ocy2 小时前
【QT入门到晋级】用开源的自定义控件开发
c++·qt·自定义控件
AiNightVision2 小时前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件
牧羊人.3333 小时前
卷积神经网络之VGG
人工智能·深度学习·神经网络·算法·cnn
akinggw3 小时前
libsherpacore - 基于 sherpa-onnx 的 C++ 语音交互静态库
c++·交互·语音识别
xiaoye-duck3 小时前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(中):全量响应实现和测试
网络·c++·语言模型·chatgpt
小郎君6583 小时前
Vue 多标签页的加载态设计:为什么我没有用 Suspense 实现 PageLoading
vue.js·算法
JJJennie7774 小时前
MAI Gateway私有化部署全攻略:大模型网关如何接入?附架构图
算法·gateway·ai网关·魔芋ai