码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 3682 To Be an Dream Architect:查重【三维坐标系中点在实数上的映射】

时间:2017-08-17 17:49:32      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:nbsp   clu   操作   一个   show   href   有一个   ips   max   

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3682

题意:

  有一个n*n*n的立方体,左下角坐标为(1,1,1),接下来进行m次操作。

  每个操作形如这样:"axis_1=a,axis_2=b".

  例如:"x=3,y=1",意思是消去所有x=3,y=1的方块。

  RT:

  技术分享

  

题解:

  问题的唯一矛盾在于:一个位置的方块可能被多次消去。

  所以。。。

  (1)由于每一个坐标(x,y,z)在实数中有唯一映射:x*n*n+y*n+z,为了节省空间,将坐标化为整数。

  (2)每操作一次,枚举消去的方块,将坐标对应的整数添加到数组中。

  (3)所有操作完成后,对数组排序。

  (4)然后扫一遍,统计不同整数的个数,即为答案。

  Tips:用set居然会MLE。。。

 

AC Code:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <algorithm>
 5 #define MAX_N 1000005
 6 
 7 using namespace std;
 8 
 9 int n,m,t;
10 int cnt;
11 int ans;
12 int arr[MAX_N];
13 
14 int main()
15 {
16     cin>>t;
17     for(int cas=1;cas<=t;cas++)
18     {
19         cin>>n>>m;
20         cnt=0;
21         ans=0;
22         for(int i=0;i<m;i++)
23         {
24             int a,b;
25             char c1,c2;
26             cin>>c1;
27             getchar();
28             cin>>a;
29             getchar();
30             cin>>c2;
31             getchar();
32             cin>>b;
33             if(c1>c2)
34             {
35                 swap(a,b);
36                 swap(c1,c2);
37             }
38             if(c1==X && c2==Y)
39             {
40                 for(int c=1;c<=n;c++)
41                 {
42                     arr[cnt++]=a*n*n+b*n+c;
43                 }
44             }
45             else if(c1==X && c2==Z)
46             {
47                 for(int c=1;c<=n;c++)
48                 {
49                     arr[cnt++]=a*n*n+c*n+b;
50                 }
51             }
52             else
53             {
54                 for(int c=1;c<=n;c++)
55                 {
56                     arr[cnt++]=c*n*n+a*n+b;
57                 }
58             }
59         }
60         sort(arr,arr+cnt);
61         arr[cnt]=-1;
62         for(int i=0;i<cnt;i++)
63         {
64             if(arr[i]!=arr[i+1]) ans++;
65         }
66         cout<<ans<<endl;
67     }
68 }

 

HDU 3682 To Be an Dream Architect:查重【三维坐标系中点在实数上的映射】

标签:nbsp   clu   操作   一个   show   href   有一个   ips   max   

原文地址:http://www.cnblogs.com/Leohh/p/7383054.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!