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

题目链接: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 }
时间: 2024-11-02 09:09:23

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

Hdu 3682 To Be an Dream Architect(Hash)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3682 思路:Hash.对于每个(x,y,z)坐标的立方体,映射为x*n*n+y*n+z,判断有多少个不同数字即为删去立方体个数. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,m; vector<int

[水+思路] hdu 3682 To Be an Dream Architect

题意: 就是有n*n*n个木块,然后给你m条三维的直线 问这些直线能够消掉多少个木块 思路: 其实就是求m条直线有几个交点 然后就是一个双重循环解决 然后读入的时候需要判重 用三个1000*1000的数组来实现. 注意 3 3 Y=2,Z=2 X=2,Y=2 X=2,Z=2 答案应该是7而不是6,因为三条线交在同一点上. 6的原因是在判断第一条线的时候 和后面两个都有交点,但是交点是同一个 其实只有1个. 这里的判重方法就是,用这条线没有的那个坐标进行判重. 因为对于Y=2,Z=2 交点的话只有

hdu3682 To Be an Dream Architect

http://acm.hdu.edu.cn/showproblem.php?pid=3682 To Be an Dream Architect Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2868    Accepted Submission(s): 826 Problem Description The "dream archit

hdu 3682 10 杭州 现场 C - To Be an Dream Architect 简单容斥

C - To Be an Dream Architect Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 3682 Appoint description:  System Crawler  (2014-11-09) Description The “dream architect” is the key role in a team o

HDU 3047 Zjnu Stadium 带权并查集

题目来源:HDU 3047 Zjnu Stadium 题意:给你一些人 然后每次输入a b c 表示b在距离a的右边c处 求有多少个矛盾的情况 思路:用sum[a] 代表a点距离根的距离 每次合并时如果根一样 判断sum数组是否符合情况 根不一样 合并两棵树 这里就是带权并查集的精髓 sum[y] = sum[a]-sum[b]+x 这里y的没有合并前b的根 #include <cstdio> #include <cstring> using namespace std; cons

hdu 1829 A Bug&#39;s Life 并查集系列

1 #include "cstdio" 2 #include "iostream" 3 #include "cstring" 4 #include "vector" 5 #include "queue" 6 using namespace std; 7 8 #define MAXN 2222 9 int fa[MAXN]; 10 int rnk[MAXN]; //秩 表示某点与根的距离 11 int n,

HDU 3367 Pseudoforest(伪森林)(并查集)

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3367 题意:在图论中,如果一个森林中有很多连通分量,并且每个连通分量中至多有一个环,那么这个森林就称为伪森林. 现在给出一个森林,求森林包含的最大的伪森林,其大小通过所有边的权值之和来比较. 分析: 1.一开始想的是:在每个连通分量中求一个最大生成树,然后加一条最大的边,再把每个连通分量算出来的值加起来,但WA了.这并不是最优的,因为还存在这种情况:一个连通分量里最初有两个环,但是伪森林要求最多一个

hdu 1272 小希的迷宫(简单并查集)

小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 31396    Accepted Submission(s): 9726 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是

POJ 2492 || HDU 1829:A Bug&#39;s Life(并查集)

传送门: POJ:点击打开链接 HDU:点击打开链接 A Bug's Life Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 27624   Accepted: 8979 Description Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they fe