生日相同【字符串】

>Link

ybtoj生日相同


>解题思路

字符串排序…


>代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

struct node
{
    
    
	int x, y, num, cnt;
} a[400];
string name, s[400][100010];
int n, x, y, m, bh[100][100];
bool v;

bool cmp (node aa, node bb)
{
    
    
	if (aa.x != bb.x) return aa.x < bb.x;
	return aa.y < bb.y;
}
bool cmp2 (string aa, string bb)
{
    
    
	if (aa.size() != bb.size()) return aa.size() < bb.size();
	return aa < bb;
} //名字按照题目要求排序

int main()
{
    
    
	scanf ("%d", &n);
	for (int i = 1; i <= n; i++)
	{
    
    
		cin >> name;
		scanf ("%d%d", &x, &y);
		if (bh[x][y] != 0) a[bh[x][y]].cnt++;
		else
		{
    
    
			bh[x][y] = ++m;
			a[bh[x][y]] = (node){
    
    x, y, bh[x][y], 1};
		}
		s[bh[x][y]][a[bh[x][y]].cnt] = name;
	}
	sort (a + 1, a + 1 + m, cmp);
	for (int i = 1; i <= m; i++)
	  if (a[i].cnt > 1)
	  {
    
    
	  	printf ("%d %d ", a[i].x, a[i].y);
	  	v = 1;
	  	sort (s[a[i].num] + 1, s[a[i].num] + 1 + a[i].cnt, cmp2);
	  	for (int j = 1; j <= a[i].cnt; j++)
	  	  cout << s[a[i].num][j] << " ";
	  	printf ("\n");
	  }
	if (!v) printf ("None");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43010386/article/details/114433288