思路参考:http://blog.csdn.net/liuwei_nefu/article/details/6009644
改用vector实现。
收获:另一种的hash思想,vector去重。
最朴素的hash,即三维数组记录是肯定不行的。
原文的作者思维很巧妙,看懂后非常容易实现。
/*
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
#include <functional>
#include <cstdlib>
#include <queue>
#include <vector>
#include <stack>
#include <cmath>
#include <map>
using namespace std;
vector<int> num;
int main()
{
int nCase;
int n, m;
while(scanf("%d", &nCase)!=EOF)
{
while(nCase--)
{
num.clear();
int len=0;
scanf("%d%d", &n, &m);
getchar();
while(m--)
{
char a, b;
int val1, val2;
scanf("%c=%d,%c=%d", &a, &val1, &b, &val2);
getchar();
if(a=='X')
{
if(b=='Y')
for(int i=1; i<=n; i++)
num.push_back(val1*n*n+val2*n+i);
else
for(int i=1; i<=n; i++)
num.push_back(val1*n*n+i*n+val2);
}
if(a=='Y')
{
if(b=='X')
for(int i=1; i<=n; i++)
num.push_back(val2*n*n+val1*n+i);
else
for(int i=1; i<=n; i++)
num.push_back(i*n*n+val1*n+val2);
}
if(a=='Z')
{
if(b=='X')
for(int i=1; i<=n; i++)
num.push_back(val2*n*n+i*n+val1);
else
for(int i=1; i<=n; i++)
num.push_back(i*n*n+val2*n+val1);
}
}
sort(num.begin(), num.end());//sort the vector
num.erase( unique( num.begin(), num.end() ), num.end());
printf("%d\n", num.size());
}
}
return 0;
}