题意:给定一个矩阵(每一行有几个非0的数据,对应的位置以及数值),输出这个矩阵的转置矩阵。
思路:直接模拟,用两个vector,一个维护数值,另外一个维护行号。注意长度为0时输出空行。
code:
#include <bits/stdc++.h>
using namespace std;
const int N=10005;vector<int>v1[N],v2[N];
int n,m,v[N];int main()
{while (~scanf("%d%d",&n,&m)){for (int i=0;i<N;i++) v1[i].clear(),v2[i].clear();int r,x;for (int i=1;i<=n;i++){scanf("%d",&r);for (int j=1;j<=r;j++) scanf("%d",&v[j]);for (int j=1;j<=r;j++) scanf("%d",&x),v1[v[j]].push_back(i),v2[v[j]].push_back(x);}printf("%d %d\n",m,n);for (int i=1;i<=m;i++){int l=v1[i].size();printf("%d",l);for (int j=0;j<l;j++) printf(" %d",v1[i][j]);if (l==0) printf("\n\n");else {printf("\n%d",v2[i][0]);for (int j=1;j<l;j++) printf(" %d",v2[i][j]);puts("");}}}}