码迷,mamicode.com
首页 > 其他好文 > 详细

UVA - 10895 Matrix Transpose

时间:2014-07-18 23:00:14      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   strong   

UVA - 10895
Time Limit:3000MS   Memory Limit:Unknown   64bit IO Format:%lld & %llu

[]  [Go Back]  [Status]  

Description

bubuko.com,布布扣


 A: Matrix Transpose 

A matrix is a rectangular array of elements, most commonly numbers. A matrix with bubuko.com,布布扣 rows and bubuko.com,布布扣 columns is said to be an bubuko.com,布布扣-by-bubuko.com,布布扣 matrix. For example,
bubuko.com,布布扣

is a 4-by-3 matrix of integers.

The individual elements of a matrix are usually given lowercase symbols and are distinguished by subscripts. The bubuko.com,布布扣th row and bubuko.com,布布扣th column of matrix bubuko.com,布布扣 is usually referred to as bubuko.com,布布扣. For example, bubuko.com,布布扣. Matrix subscripts are 1-based.

The transpose of a matrix bubuko.com,布布扣, denoted bubuko.com,布布扣, is formed by interchanging the rows and columns of bubuko.com,布布扣. That is, the bubuko.com,布布扣th element of bubuko.com,布布扣 is the bubuko.com,布布扣th element of bubuko.com,布布扣. For example, the transpose of matrix bubuko.com,布布扣 above is:

bubuko.com,布布扣

A matrix is said to be sparse if there are relatively few non-zero elements. As a bubuko.com,布布扣-by-bubuko.com,布布扣 matrix has bubuko.com,布布扣 number of elements, storing all elements of a large sparse matrix may be inefficient as there would be many zeroes. There are a number of ways to represent sparse matrices, but essentially they are all the same: store only the non-zero elements of the matrix along with their row and column.

You are to write a program to output the transpose of a sparse matrix of integers.

Input 

You are given several sparse matrix in a row, each of them described as follows. The first line of the input corresponds to the dimension of the matrix, bubuko.com,布布扣 and bubuko.com,布布扣 (which are the number of rows and columns, respectively, of the matrix). You are then given bubuko.com,布布扣 sets of numbers, which represent the rows of the matrix. Each set consists of two lines which represents a row of the matrix. The first line of a set starts with the number bubuko.com,布布扣, which is the number of non-zero elements in that row, followed by bubuko.com,布布扣 numbers which correspond to the column indices of the non-zero elements in that row, in ascending order; the second line has bubuko.com,布布扣 integers which are the matrix elements of that row. For example, matrix bubuko.com,布布扣 above would have the following representation:
4 3
3 1 2 3
1 3 2
2 2 3
4 -1
0

3 1 2 3
5 -2 11
Note that for a row with all zero elements, the corresponding set would just be one number, `0‘, in the first line, followed by a blank line.

You may assume:

  • the dimension of the sparse matrix would not exceed 10000-by-10000,
  • the number of non-zero element would be no more than 1000,
  • each element of the matrix would be in the range of -10000 to 10000, and
  • each line has no more than 79 characters.

Output 

For each input case, the transpose of the given matrix in the same representation.

Sample Input 

4 3
3 1 2 3
1 3 2
2 2 3
4 -1
0

3 1 2 3
5 -2 11

Sample Output 

3 4
2 1 4
1 5
3 1 2 4
3 4 -2
3 1 2 4
2 -1 11

题意:首先给你n*m的矩阵,然后给出每行的情况。第一个数r代表该行有几个非0的数,位置是哪里,然后给出每个位置的值,求矩阵的倒置

思路:用两个vector,一个记录该列有效值所对应的行,还一个记录该位置的值

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
const int MAXN = 10010;

vector<int> row[MAXN];
vector<int> val[MAXN];
int n, m, arr[MAXN];

void print() {
	printf("%d %d\n", m, n);	
	for (int i = 1; i <= m; i++) {
		int len = row[i].size();
		printf("%d", len);
		for (int j = 0; j < len; j++)
			printf(" %d", row[i][j]);
		if (len == 0)
			printf("\n\n");
		else {
			printf("\n%d", val[i][0]);
			for (int j = 1; j < len; j++)
				printf(" %d", val[i][j]);
			printf("\n");
		}
	}
}

int main() {
	while (scanf("%d%d", &n ,&m) != EOF) {
		for (int i = 0; i < MAXN; i++) {
			row[i].clear();
			val[i].clear();
		}
		int r, x;
		for (int i = 1; i <= n; i++) {
			scanf("%d", &r);	
			for (int j = 1; j <= r; j++)	
				scanf("%d", &arr[j]);
			for (int j = 1; j <= r; j++) {
				scanf("%d", &x);
				row[arr[j]].push_back(i);
				val[arr[j]].push_back(x);
			}
		}
		print();
	}
	return 0;
}



UVA - 10895 Matrix Transpose,布布扣,bubuko.com

UVA - 10895 Matrix Transpose

标签:des   style   blog   http   color   strong   

原文地址:http://blog.csdn.net/u011345136/article/details/37885419

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!