打印锯齿矩阵

锯齿矩阵是指每一行包含的元素个数不相同的矩阵,比如:
1
3 5 2 6 1
2
2 3 4
3
1 6 2 7
读入若干对整数 (x,y),表示在第 xx 行的末尾加上一个元素 y。输出最终的锯齿数组。初始时矩阵为空。

输入格式

第一行输入两个整数 n,m(1≤n,m≤10000),其中 nn 表示锯齿数组的行数,mm 表示插入的元素总数。

接下来一共 mm 行,每行两个整数 x,y(1≤x≤n,0≤y≤10000),表示在第x 行的末尾插入一个元素 y。

输出格式

一共输出 n 行,每行若干个用空格分隔的整数。如果某行没有任何元素,则输出一个空行。

样例输入

3 12
1 3
2 2
2 3
2 4
3 1
3 6
1 5
1 2
1 6
3 2
3 7
1 1
样例输出

3 5 2 6 1
2 3 4
1 6 2 7

  • 完整代码
//vector<T> vec;  
//构造一个名为vec的储存数据类型
//为T的动态数组。其中T为需要储存的数据类型
//初始时vec为空
//push_back  末尾添加一个元素
//pop_back   在末尾弹出一个元素
//size       获取长度
//clear       清空

//修改vector其中的某个元素,直接赋值,比如vec[1]=3;
/*vector的方法size()可以直接获取长度,通过[]可以直接获取其中的元素,和数组相同*/
//clear()会清空vector中内容,但是不会重新分配
/*
如果需要清空vector的内存,一种典型的方法是使用交换,
即使用一个空的vector和原来的vector进行交换,完成内存的释放
vector<int>v;
{
vector<int> x;
v.swap(x);
}
*/
/*
Clear content
Removes all elements from the vector (which are destroyed), leaving the container with a size of 0.

A reallocation is not guaranteed to happen, and the vector capacity is not guaranteed to change due to calling this function. A typical alternative that forces a reallocation is to use swap:

vector<T>().swap(x);   // clear x reallocating

*/

#include<iostream>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<algorithm>
using namespace std;
int main(void)
{
    int m, n, i, j, k;
    scanf("%d%d", &n, &m);
    vector<int> ivec[10000];
    for (int k = 0; k < m; k++)
    {
        scanf("%d%d", &i, &j);
        ivec[i - 1].push_back(j);
    } 
    for (i = 0; i < n; i++)
    {
        if (!ivec[i].size())
        {
            printf("\n");
            continue;
        }
        for (j = 0; j < ivec[i].size()-1; j++)
        {
            printf("%d ", ivec[i][j]);
        }
        printf("%d", ivec[i][j]);
        printf("\n");
    }
    return 0;
}
posted @ 2017-10-01 14:26  Chasssser  阅读(305)  评论(0编辑  收藏  举报