(二维vector)(绝对值求和等式的处理)B. Playing in a Casino

简介: (二维vector)(绝对值求和等式的处理)B. Playing in a Casino

我的思路

把竖式排序,然后变成差分数组,用第一项来表示全部项;

自己没做过的做法,很难写对,正确性都没有成功验证,还得积累解题套路

思路

// 不是让数组保持原状竖着排序,顺时针转90度,n,m交换,然后再一行一行排序

// 列出表达式 s = |3-1| + |7-1| + |7-3|,绝对值的式子的处理,只要能把元素交换成大减小就可以忽略绝对值了。

// 把加的和减的拿出来看,加的个数从小到大是0,1,2,减的是2,1,0;

//

涉及的套路

1.数组旋转:

用途:目前见过 除了题目明确要求进行这个操作外,用于数组的纵向排序

向右旋转90度:

cin时ij倒转

for(int i= 0;i < n;i++){
  for(int j = 0;j < m;j++){
    cin >> f[j][i];
}

后续操作时n,m调换位置

将纵列换成横行后进行排序
for(int i = 0;i < m;i++) sort(f[i],f[i]+n);


for(int i = 0;i < m;i++){
  for(int j= 0;j < n;j++){
    cout << f[i][j];
  }
}
2.二维vector的初始化与使用

定义:

vector<vector<int> > f(n,vector<int> (m));
等价于
f[n][m];


好处在于,n,m在vector中可以为变量。

对于某些题给范围时给的是

n*m <= 5e5,

就不能用二维数组,只能用vector了

还有通过push_back()实现动态扩容


注意vector访问时下标从0开始

输入元素:

通过上面的定义方式定义后,可以直接通过下标来输入,使用方法同普通数组
for(int i = 0;i < n;i++){
  for(int j= 0;j < m;j++){
    cin >> f[i][j];
  }
}
如果只是
vector<vector<int> > f;
这样的定义,没有提前开辟内存的话
输入时要用pushback()
for(int i = 0;i < n;i++){
  for(int j= 0;j < m;j++){
    int x;
    cin >> x;
    f[i].pushback(x);
  }
}
目录
相关文章
|
6月前
如何判别三角形和求10 个整数中最大值?
如何判别三角形和求10 个整数中最大值?
|
6月前
|
C++
【PTA】​L1-048 矩阵A乘以B​ (C++)
【PTA】​L1-048 矩阵A乘以B​ (C++)
70 0
【PTA】​L1-048 矩阵A乘以B​ (C++)
|
C语言
二维数组实验题:按如下公式递归计算矩阵行列式的值:(C语言)
二维数组实验题:按如下公式递归计算矩阵行列式的值:(C语言)
227 1
二维数组实验题:按如下公式递归计算矩阵行列式的值:(C语言)
第3章 数组与矩阵——3.3 矩阵元素的运算(1)
第3章 数组与矩阵——3.3 矩阵元素的运算(1)
第3章 数组与矩阵——3.3 矩阵元素的运算(2)
第3章 数组与矩阵——3.3 矩阵元素的运算(2)
|
机器学习/深度学习 C语言 C++
C语言计算N*N矩阵的转置、平均值、对角线元素之和、周边元素之和
C语言计算N*N矩阵的转置、平均值、对角线元素之和、周边元素之和
246 0
|
存储
矩阵转置(mooc)用户输入矩阵阶数,然后按行输入所有矩阵元素(整数),将该矩阵转置输出。阶数应是[1,5]之间的整数,不在该区间时,显示“matrix order error”。
矩阵转置(mooc)用户输入矩阵阶数,然后按行输入所有矩阵元素(整数),将该矩阵转置输出。阶数应是[1,5]之间的整数,不在该区间时,显示“matrix order error”。
108 0
|
机器学习/深度学习
【欧拉计划第 6 题】和的平方与平方的和差值 Sum square difference
【欧拉计划第 6 题】和的平方与平方的和差值 Sum square difference
162 0