哇这题真的是坑,本来以为就只是个纯纯的 map < string , set >
结果最后一个点超时了呜呜呜
忽然惊鸿一瞥,发现题目饱含深意,固定四位数,而且前三位是字母后一位是数字?为什么要规定的如此清楚,哦那这个字符不就是个26进制数了吗??!
惊了,这么改一下过了。。。
代码如下
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6;
vector < int > query [MAXN];//查询
int num [MAXN]; // 人数
int turn ( string s) //转为26进制数
{
int k = 0;
for (int i = 0; i < 4; i++)
{
if(i == 3) k = k * 26 + s[i] - '0';
else k = k*26 + s[i] - 'A';
}
return k;
}
int main()
{
int n,m;
string name;
scanf("%d%d",&n,&m);
for (int i = 0; i < m; i++)
{
int room,ren;
string s;
scanf("%d%d",&room,&ren);
for ( int j = 0; j < ren; j++ )
{
cin >> s;
int h = turn(s);
query[h].push_back(room);
num[h]++;
}
}
for (int i = 0; i < n; i++)
{
cin >> name;
int h = turn(name);
cout << name << " " << num[h] ;
sort(query[h].begin(),query[h].end());
for (int j = 0 ; j < num[h]; j++)
printf(" %d",query[h][j]);
cout << endl;
}
return 0;
}