之前做了一题学校oj的题目
题目如下:
题目描述
给定一个m行n列的二维矩阵,输出其转置矩阵。1<=m、n<=100000,可能是1行100000列,也可能是10000行50列。你可能不能预定义数组的大小了,你要学会使用动态内存分配哦。
输入
输入第一行是m和n,然后是一个m行n列的矩阵。
输出
输出转置后的矩阵
样例输入 Copy
3 4 1 2 3 4 5 6 7 8 9 5 4 6
样例输出 Copy
1 5 9 2 6 5 3 7 4 4 8 6
由于题目的数字大,且输入次数多所以一开始就考虑到了解绑cin,但还是TLE,TLE代码如下:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int m,n;
cin>>m>>n;
int a[m][n];
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout<<a[j][i]<<" ";
}
cout<<endl;
}
return 0;
}
后来提交不断超时,之前有听说过endl会慢些,这次才发现原来同样是换行endl对于时间成本增加这么大,所以这题必须要\n才可行,
吸取教学以后比赛对于换行次数大的题目也少用endl了 T_T
下面是AC代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int m,n;
cin>>m>>n;
int a[m][n];
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout<<a[j][i]<<" ";
}
cout<<'\n';
}
return 0;
}