SDUT 3347 数据结构实验之数组三:快速转置

数据结构实验之数组三:快速转置

Time Limit: 1000MS Memory Limit: 65536KB

Submit Statistic

Problem Description

转置运算是一种最简单的矩阵运算,对于一个m*n的矩阵M( 1 = < m < = 10000,1 = < n < = 10000 ),它的转置矩阵T是一个n*m的矩阵,且T( i , j )=M( j , i )。显然,一个稀疏矩阵的转置仍然是稀疏矩阵。你的任务是对给定一个m*n的稀疏矩阵( m , n < = 10000 ),求该矩阵的转置矩阵并输出。矩阵M和转置后的矩阵T如下图示例所示。
   
   稀疏矩阵M                             稀疏矩阵T

Input

连续输入多组数据,每组数据的第一行是三个整数mu, nu, tu(tu <= 50),分别表示稀疏矩阵的行数、列数和矩阵中非零元素的个数,随后tu行输入稀疏矩阵的非零元素所在的行、列值和非零元素的值,同一行数据之间用空格间隔。(矩阵以行序为主序)

Output

输出转置后的稀疏矩阵的三元组顺序表表示。

Example Input

3 5 5
1 2 14
1 5 -5
2 2 -7
3 1 36
3 4 28

Example Output

1 3 36
2 1 14
2 2 -7
4 3 28
5 1 -5

DQE:

矩阵的快速转置,水。

 1 #include <iostream>
 2 #include <cstdio>
 3
 4 using namespace std;
 5
 6 struct TS
 7 {
 8     struct{int i,j;    int e;}data[10010];    //10000
 9     int nu,mu,tu;
10 };
11
12 void zz(TS f,TS &z)
13 {
14     z.tu=f.tu;z.nu=f.mu;z.mu=f.nu;    //jscpy
15     int num[10010]={0},cpot[10010]={1};
16     int i;
17     for(i=1;i<=f.tu;i++)
18     {
19         num[f.data[i].j]++;
20     }
21     cpot[1]=1;
22     for(i=2;i<=z.nu;i++)
23     {
24         cpot[i]=cpot[i-1]+num[i-1];
25     }
26     for(i=1;i<=z.tu;i++)
27     {
28         int zi=f.data[i].j;
29         int zn=cpot[zi];
30         z.data[zn].e=f.data[i].e;
31         z.data[zn].i=f.data[i].j;
32         z.data[zn].j=f.data[i].i;
33         cpot[zi]++;
34     }
35 }
36
37 int main()
38 {
39     TS f,z;
40     while(scanf("%d %d %d",&f.nu,&f.mu,&f.tu)!=EOF)
41     {
42         int i;
43         for(i=1;i<=f.tu;i++)    //in
44         {
45             scanf("%d %d %d",&f.data[i].i,&f.data[i].j,&f.data[i].e);
46         }
47
48         zz(f,z);
49
50         for(i=1;i<=z.tu;i++)    //out
51         {
52             printf("%d %d %d\n",z.data[i].i,z.data[i].j,z.data[i].e);
53         }
54     }
55     return 0;
56 }
57
58 /***************************************************
59 User name: ***
60 Result: Accepted
61 Take time: 0ms
62 Take Memory: 464KB
63 Submit time: 2016-10-12 16:19:44
64 ****************************************************/
时间: 2024-10-12 16:06:16

SDUT 3347 数据结构实验之数组三:快速转置的相关文章

SDUT 3342 数据结构实验之二叉树三:统计叶子数

数据结构实验之二叉树三:统计叶子数 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点).请建立二叉树并求二叉树的叶子结点个数. Input 连续输入多组数据,每组数据输入一个长度小于50个字符的字符串. Output 输出二叉树的叶子结点个数. Example Input abc,,de,g,,f

SDUT 3311 数据结构实验之串三:KMP应用

数据结构实验之串三:KMP应用 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 有n个小朋友,每个小朋友手里有一些糖块,现在这些小朋友排成一排,编号是由1到n.现在给出m个数,能不能唯一的确定一对值l和r(l <= r),使得这m个数刚好是第l个小朋友到第r个小朋友手里的糖块数? Input 首先输入一个整数n,代表有n个小朋友.下一行输入n个数,分别代表每个小朋友手里糖的数量. 之后再输

SDUT 3375 数据结构实验之查找三:树的种类统计

数据结构实验之查找三:树的种类统计 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 随着卫星成像技术的应用,自然资源研究机构可以识别每一个棵树的种类.请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比. Input 输入一组测试数据.数据的第1行给出一个正整数N (n <= 100000),N表示树的数量:随后N行,每行给出卫星观测到的一棵树的种类名称,树的名称是一个不超过20

数据结构实验之链表三:链表的逆置

数据结构实验之链表三:链表的逆置 Time Limit: 1000MS Memory limit: 65536K 题目描述 输入多个整数,以-1作为结束标志,顺序建立一个带头结点的单链表,之后对该单链表的数据进行逆置,并输出逆置后的单链表数据. 输入 输入多个整数,以-1作为结束标志. 输出 输出逆置后的单链表数据. 示例输入 12 56 4 6 55 15 33 62 -1 示例输出 62 33 15 55 6 4 56 12 提示 不得使用数组. 来源 示例程序 /*************

数据结构实验之串三:KMP应用

C - 数据结构实验之串三:KMP应用 Description 有n个小朋友,每个小朋友手里有一些糖块,现在这些小朋友排成一排,编号是由1到n.现在给出m个数,能不能唯一的确定一对值l和r(l <= r),使得这m个数刚好是第l个小朋友到第r个小朋友手里的糖块数? Input 首先输入一个整数n,代表有n个小朋友.下一行输入n个数,分别代表每个小朋友手里糖的数量. 之后再输入一个整数m,代表下面有m个数.下一行输入这m个数. Output 如果能唯一的确定一对l,r的值,那么输出这两个值,否则输

数据结构实验之栈三:后缀式求值

数据结构实验之栈三:后缀式求值 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值. 输入 输入一个算术表达式的后缀式字符串,以'#'作为结束标志. 输出 求该后缀式所对应的算术表达式的值,并输出之. 示例输入 59*684/-3*+# 示例输出 57 提示 基本操作数都是一位正整数! 来源 示例程序 #include <stdio.h>

数据结构实验之栈三:后缀式求值 (stack)

数据结构实验之栈三:后缀式求值 Time Limit: 1000MS Memory limit: 65536K 题目描述 对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值. 输入 输入一个算术表达式的后缀式字符串,以‘#’作为结束标志. 输出 求该后缀式所对应的算术表达式的值,并输出之. 示例输入 59*684/-3*+# 示例输出 57 1 #include<stdio.h> 2 #include<string.h> 3 #include&

数据结构实验之串三:KMP应用(KMP模板)

数据结构实验之串三:KMP应用(KMP模板) AC_Code: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <map> 6 #include <stack> 7 using namespace std; 8 typedef long long ll; 9 int Nex[1000000]; 10

SDUT 3361 数据结构实验之图论四:迷宫探索

数据结构实验之图论四:迷宫探索 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description 有一个地下迷宫,它的通道都是直的,而通道所有交叉点(包括通道的端点)上都有一盏灯和一个开关:请问如何从某个起点开始在迷宫中点亮所有的灯并回到起点? Input 连续T组数据输入,每组数据第一行给出三个正整数,分别表示地下迷宫的结点数N(1 < N <= 1000).边数M(M <= 30