思路参考: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;
}
作者:FreeAquar
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步