思路: v e c t o r + vector+ vector+排序即可。
注意不能用 s e t set set会超时,应该每次 s o r t sort sort下。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e5+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7; #define mst(a,b) memset(a,b,sizeof a) #define lx x<<1 #define rx x<<1|1 #define reg register #define PII pair<int,int> #define fi first #define se second #define pb push_back #define il inline #define ios ios::sync_with_stdio(false),cin.tie(0) int n,m; vector<string>v[2505]; char s[10]; int main(){ scanf("%d%d",&n,&m); for(int i=0,x,y;i<n;i++){ scanf("%s%d",s,&y); string name=s; while(y--){ scanf("%d",&x);v[x-1].pb(name); } } for(int i=0;i<m;i++){ //cout<<i+1<<" "<<v[i].size()<<endl; printf("%d %d\n",i+1,v[i].size()); sort(v[i].begin(),v[i].end()); for(auto j:v[i]) printf("%s\n",j.c_str()); } return 0; }