二维数组转置(一维模拟二维)

输入一个n行m列的数组,输出他的转置,具体来说

输出的第i行第j个数字,应是输入的第j行第i个数字。

1 <= n <= 20000

1 <= m <= 20000

1 <= n * m <= 20000

1 <= a[i][j] <= 1000

特别注意,你并不能声明一个二维数组,两维的大小都是20000。(回顾课件中,数组不能太大,二维数组的大小是两维的乘积)

如果你不会做本题,请特别复习课件中,如何用一维数组模拟二维数组。(二维数组本质上和一维数组等价,所以你只需要一个大小为20000一维数组)

输入

第一行两个整数n, m表示数组的行数和列数
接下来n行,每行m个整数表示数组内容。

输出

第一行先输出m, n。
接下来输出转置的结果,共m行n列。
其中第i行第j个数字,应是输入的第j行第i个数字。

输入样例

3 2
1 2
3 4
5 6

输出样例

2 3
1 3 5
2 4 6

用二维会爆内存

#include
#include
#include
#include
#include 
#include 
#include 
#define ll long long
using namespace std;
ll ans[100000];
int main()
{
    ll n,m;
    cin>>n>>m;
    for(ll i=1;i<=n*m;i++)
    {
        cin>>ans[i];
    }
    cout<

 

你可能感兴趣的:(51,nod)