1. 题目要求
2. 解答
题目的时间上限是 5 秒,这是非常宽裕的。如果预先存好数组,然后按照列访问的话也非常耗时,考虑采用 vector
进行一定程度思维上的简化,顺便复习了一下多重 vector
的写法。
思路比较简单,n x m
的矩阵,开 m
个 vector
,每个 vector
内存入n
个数(对应一列)最后输出。
#include <iostream>
#include <vector>
using namespace std;
const int N = 1010;
vector<vector<int> > v(N, vector<int>()); // 注意要这样写!二维 vector 一定要指定第一维的大小!
int main()
{
int n, m;
scanf("%d%d", &n, &m);
int x;
for(int j = 0; j < n; j ++)
for(int i = m - 1; i >= 0; i --)
{
scanf("%d", &x);
v[i].push_back(x);
}
for(int i = 0; i < m; i ++)
{
int len = v[i].size();
for(int j = 0; j < len; j ++)
{
printf("%d", v[i][j]);
if(j != len - 1) printf(" "); else printf("\n");
}
}
return 0;
}
3. 总结
这一题如果用二维数组按照列访问的话,时间消耗也会很大。但是题目给出了5秒的非常宽松的时间限制,所以暴力做法下 vector
思路感觉会方便理解一些。