将每个格子标记为 x*n*n+y*n+z 每个格子会有一个独特的编号 将它放入vector中 去重 我一开始用 set 超时
#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
int main()
{
vector<int> a;
int t,n,m;
scanf("%d",&t);
while(t--)
{
a.clear();
scanf("%d%d%*c",&n,&m);
for(int i = 0; i < m; i++)
{
char c,d;
int u,v;
scanf("%c%*c%d%*c%c%*c%d%*c",&c,&u,&d,&v);
if(c == 'X' && d == 'Y')
for(int i = 1; i <= n; i++)
a.push_back(u*n*n+v*n+i);
else if(c == 'X' && d == 'Z')
for(int i = 1; i <= n; i++)
a.push_back(u*n*n+i*n+v);
else if(c == 'Y' && d == 'X')
for(int i = 1; i <= n; i++)
a.push_back(v*n*n+u*n+i);
else if(c == 'Y' && d == 'Z')
for(int i = 1; i <= n; i++)
a.push_back(i*n*n+u*n+v);
else if(c == 'Z' && d == 'Y')
for(int i = 1; i <= n; i++)
a.push_back(i*n*n+v*n+u);
else if(c == 'Z' && d == 'X')
for(int i = 1; i <= n; i++)
a.push_back(v*n*n+i*n+u);
}
sort(a.begin(), a.end());
int u = unique(a.begin(), a.end())-a.begin();
printf("%d\n",u);
}
return 0;
}