题目链接:https://abc113.contest.atcoder.jp/tasks/abc113_c

       题意是有n个城市,m个县,每个县都有一个权值,现在让根据第i个城市的所有县的权值进行编号,比如第一个样例,先输入n和m,然后输入该县所在城市,然后输入这个县的权值,第一个城市有两个县,然后根据权值编号1和2,然后按题目要求格式输出就好了。

       写法就是一个模拟吧,先按权值排序,把编号改一下,再按输入的顺序排个序输出出来就好了。


AC代码:

#include <bits/stdc++.h>
using namespace std;
int n,m;
struct Node{
	int x,y,num;
}Edge[100005];

bool cmp(Node a,Node b){
	if(a.x == b.x){
		return a.y < b.y;
	}
	return a.x < b.x;
}

bool cmp1(Node a,Node b){
	return a.num < b.num;
}

int main()
{
	scanf("%d%d",&n,&m);
	for(int i=0;i<m;i++){
		scanf("%d%d",&Edge[i].x,&Edge[i].y);
		Edge[i].num = i;
	}
	sort(Edge,Edge+m,cmp);
	int num = 1;
	for(int i=0;i<m-1;i++){
		if(Edge[i].x == Edge[i+1].x){
			Edge[i].y = num++;
		}
		else{
			Edge[i].y = num;
			num = 1;
		}
	}
	if(Edge[m-1].x == Edge[m-1].x) Edge[m-1].y = num;
	else Edge[m-1].y = ++num;
	sort(Edge,Edge+m,cmp1);
	for(int i=0;i<m;i++){
		printf("%06d%06d\n",Edge[i].x,Edge[i].y);
	}
	return 0;
}