ID

Problem Statement

In Republic of Atcoder, there are N prefectures, and a total of M cities that belong to those prefectures.

City i is established in year Yi and belongs to Prefecture Pi.

You can assume that there are no multiple cities that are established in the same year.

It is decided to allocate a 12-digit ID number to each city.

If City i is the x-th established city among the cities that belong to Prefecture i, the first six digits of the ID number of City i is Pi, and the last six digits of the ID number is x.

Here, if Pi or x (or both) has less than six digits, zeros are added to the left until it has six digits.

Find the ID numbers for all the cities.

Note that there can be a prefecture with no cities.

Constraints
  • 1≤N≤105
  • 1≤M≤105
  • 1≤Pi≤N
  • 1≤Yi≤109
  • Yi are all different.
  • All values ininput are integers.
Input

Input is given from Standard Input in the following format:
N M
P1 Y1
:
PM YM

Output

Print the ID numbers for all the cities, in ascending order of indices (City 1, City 2, …).

Sample Input 1

2 3
1 32
2 63
1 12

Sample Output 1

000001000002
000002000001
000001000001

  • As City 1 is the second established city among the cities that belong
    to Prefecture 1, its ID number is 000001000002.
  • As City 2 is the first established city among the cities that belong
    to Prefecture 2, its ID number is 000002000001.
  • As City 3 is the first established city among the cities that belong
    to Prefecture 1, its ID number is 000001000001.
Sample Input 2

2 3
2 55
2 77
2 99

Sample Output 2

000002000001
000002000002
000002000003

#include<cstdio>
#include<iostream>
#include<algorithm>

using namespace std;

struct temp
{
    int rank;
    int p;
    int y;
}a[100005];

int cmp(temp x, temp y)
{
    if(x.p != y.p)
        return x.p<y.p;
    else
        return x.y<y.y;
}

int main()
{
    int n,m;
    while(cin >> n >> m)
    {
        int b[100005];
    for(int i = 0; i< m; i++)
    {
        a[i].rank = i;
        cin >> a[i].p >> a[i].y;
        b[i] = a[i].p;
    }

    sort(a,a+m,cmp);
    int f = a[0].p,flag = 1;
    int x[100005];

    for(int i = 0; i < m; i++)
    {
        if(a[i].p != f)
        {
            flag = 1;
            f = a[i].p;
        }
        x[a[i].rank] = flag++;
    }

    for(int i = 0; i < m; i++)
        printf("%06d%06d\n",b[i],x[i]);

    }
    return 0;
}

Thank for yot like!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值