标签:hdu
http://acm.hdu.edu.cn/showproblem.php?pid=3682

2 3 2 Y=1,Z=3 X=3,Y=1 10 2 X=3,Y=3 Y=3,Z=3
5 19
题意:每次对立方体切割一条线上的块,问切割了多少个。
思路:暴力。。。把每个小立方块哈希编号为x*n*n+y*n+z,然后最后排序判重下就好。。。。。
stl大法好。。直接用unique。。。
/**
* @author neko01
*/
//#pragma comment(linker, "/STACK:102400000,102400000")
#include <cstdio>
#include <cstring>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <cmath>
#include <set>
#include <map>
using namespace std;
typedef long long LL;
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define pb push_back
#define mp(a,b) make_pair(a,b)
#define clr(a) memset(a,0,sizeof a)
#define clr1(a) memset(a,-1,sizeof a)
#define dbg(a) printf("%d\n",a)
typedef pair<int,int> pp;
const double eps=1e-9;
const double pi=acos(-1.0);
const int INF=0x3f3f3f3f;
const LL inf=(((LL)1)<<61)+5;
vector<int>ans;
int main()
{
int n,m,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
getchar();
ans.clear();
while(m--)
{
char c1,c2;
int a,b;
scanf("%c=%d,%c=%d",&c1,&a,&c2,&b);
getchar();
if(c1=='X')
{
if(c2=='Y')
for(int i=1;i<=n;i++)
ans.pb(a*n*n+b*n+i);
else
for(int i=1;i<=n;i++)
ans.pb(a*n*n+i*n+b);
}
else if(c1=='Y')
{
if(c2=='X')
for(int i=1;i<=n;i++)
ans.pb(b*n*n+a*n+i);
else
for(int i=1;i<=n;i++)
ans.pb(i*n*n+a*n+b);
}
else
{
if(c2=='X')
for(int i=1;i<=n;i++)
ans.pb(b*n*n+i*n+a);
else
for(int i=1;i<=n;i++)
ans.pb(i*n*n+b*n+a);
}
}
sort(ans.begin(),ans.end());
int sz=unique(ans.begin(),ans.end())-ans.begin();
printf("%d\n",sz);
}
return 0;
}
hdu3682 To Be an Dream Architect
标签:hdu
原文地址:http://blog.csdn.net/neko01/article/details/40678421