hdu 3682
将每个格子标记为 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; }