hdu--5128--计算几何<算不上.暴力模拟> && hdu--5131--初级cmp

首先 给你N个点的坐标 你要找出其中的4个点来构造矩形

可以选择4个点 或者 一条对角线来进行构造

4个点 需要写个4层for  对角线只要2层for相比下 还是对角线比较好

虽然 我们会重复构造相同的矩形出来 但是没关系 题目数据很小的

接下来 就是矩形是否相交的判断了

注意一种特殊情况 矩阵 I 内含与 矩阵 J 或者是矩阵 j 内含i的含 就是得到外面的矩阵的面积

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4
 5 int n , cnt;
 6 const int size = 35;
 7 struct data
 8 {
 9     int x , y;
10     int minX , minY , maxX , maxY , area;
11 }node[size],mat[size];
12 bool vis[220][220];
13
14 void getMat( )
15 {
16     for( int i = 0 ; i<n-1 ; i++ )
17     {
18         for( int j = i+1 ; j<n ; j++ )
19         {
20             if( node[i].x==node[j].x || node[i].y==node[j].y )
21                 continue;
22             int minX = min( node[i].x , node[j].x );
23             int maxX = max( node[i].x , node[j].x );
24             int minY = min( node[i].y , node[j].y );
25             int maxY = max( node[i].y , node[j].y );
26             if( vis[minX][minY] && vis[minX][maxY] && vis[maxX][minY] && vis[maxX][maxY] )
27             {
28                 mat[cnt].minX = minX , mat[cnt].minY = minY , mat[cnt].maxX = maxX , mat[cnt].maxY = maxY;
29                 mat[cnt++].area = (maxX-minX) * (maxY-minY);
30             }
31         }
32     }
33 }
34
35 int solve( int i , int j )
36 {
37     //i与j相同
38     if( mat[i].minX==mat[j].minX && mat[i].maxX==mat[j].maxX && mat[i].minY==mat[j].minY && mat[i].maxY==mat[j].maxY )
39         return -1;
40     //i包含了J
41     if( mat[i].minX<mat[j].minX && mat[i].maxX>mat[j].maxX && mat[i].minY<mat[j].minY && mat[i].maxY>mat[j].maxY )
42         return mat[i].area;
43     //j包含了i
44     if( mat[i].minX>mat[j].minX && mat[i].maxX<mat[j].maxX && mat[i].minY>mat[j].minY && mat[i].maxY<mat[j].maxY )
45         return mat[j].area;
46     //重叠的情况 以i或j为参考都可以 固定一个
47     if( (mat[i].minX>=mat[j].minX&&mat[i].minX<=mat[j].maxX) || (mat[i].maxX>=mat[j].minX&&mat[i].maxX<=mat[j].maxX) )
48     {
49         if( (mat[i].minY>=mat[j].minY&&mat[i].minY<=mat[j].maxY) || (mat[i].maxY>=mat[j].minY&&mat[i].maxY<=mat[j].maxY) )
50         {
51             return -1;
52         }
53     }
54     if( (mat[j].minX>=mat[i].minX&&mat[j].minX<=mat[i].maxX) || (mat[j].maxX>=mat[i].minX&&mat[j].maxX<=mat[i].maxX) )
55     {
56         if( (mat[j].minY>=mat[i].minY&&mat[j].minY<=mat[i].maxY) || (mat[j].maxY>=mat[i].minY&&mat[j].maxY<=mat[i].maxY) )
57         {
58             return -1;
59         }
60     }
61     return mat[i].area + mat[j].area;
62 }
63
64 int main()
65 {
66     int ans;
67     while( cin >> n && n )
68     {
69         memset( vis , false , sizeof(vis) );
70         cnt = 0;
71         for( int i = 0 ; i<n ; i++ )
72         {
73             cin >> node[i].x >> node[i].y;
74             vis[ node[i].x ][ node[i].y ] = true;
75         }
76         getMat( );
77         ans = -1;
78         for( int i = 0 ; i<cnt-1 ; i++ )
79         {
80             for( int j = i+1 ; j<cnt ; j++ )
81             {
82                 ans = max( ans , solve(i,j) );
83             }
84         }
85         if( ans==-1 )
86             cout << "imp" << endl;
87         else
88             cout << ans << endl;
89     }
90     return 0;
91 }

虽然写麻烦了=_=  但毕竟容易接受 就是判断出所有的不同情况来

懒得再开一篇了 将5131也放一起吧

它相比上题 难度差不多 但是容易写啊 没什么要注意的。。

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <string>
 4 #include <map>
 5 using namespace std;
 6
 7 int n;
 8 const int size = 220;
 9 map<string,int>mp;
10 struct data
11 {
12     string name;
13     int num;
14 }node[size];
15
16 bool cmp( const data p , const data q )
17 {
18     if( p.num == q.num )
19     {
20         return p.name < q.name;
21     }
22     return p.num > q.num;
23 }
24
25 void work( )
26 {
27     for( int i = 0 ; i<n ; i++ )
28     {
29         cout << node[i].name << " " << node[i].num << endl;
30         mp[ node[i].name ] = i;
31     }
32 }
33
34 int main()
35 {
36     cin.sync_with_stdio(false);
37     int m , index , temp;
38     char str[60];
39     while( cin >> n && n )
40     {
41         mp.clear();
42         for( int i = 0 ; i<n ; i++ )
43         {
44             cin >> node[i].name >> node[i].num;
45         }
46         sort( node , node+n , cmp );
47         cin >> m;
48         work( );
49         while( m-- )
50         {
51             cin >> str;
52             temp = mp[str];
53             index = temp;
54             while( index>=1 )
55             {
56                 if( node[index-1].num == node[index].num )
57                 {
58                     -- index;
59                 }
60                 else
61                     break;
62             }
63             cout << index+1;
64             index = max( 1 , temp-index+1 );
65             if( index>1 )
66                 cout << " " << index;
67             cout << endl;
68         }
69     }
70     return 0;
71 }

时间: 2024-11-01 01:52:27

hdu--5128--计算几何<算不上.暴力模拟> && hdu--5131--初级cmp的相关文章

HDU 4858 项目管理(邻接表 暴力模拟)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的! 两个节点间可能有多条边,不过一条边的两端必然是不同的节点.每个节点都有一个能量值. 现在我们要编写一个项目管理软件,这个软件呢有两个操作:1.给某个项目的能量值加上一个特定值.2.询问跟一个项目相邻的项目的能量值之和.(如果有多条边就算多次,比如a和b有2条边,那么询问a的时候b的权值算2次). 解题报告:这个

hdu 5641 King&#39;s Phone(暴力模拟题)

Problem Description In a military parade, the King sees lots of new things, including an Andriod Phone. He becomes interested in the pattern lock screen. The pattern interface is a 3×3 square lattice, the three points in the first line are labeled as

HDU 1032 [The 3n + 1 problem] 暴力模拟

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1032 题目大意:给出i,j,要求输出i j之间"3N+1"的循环次数的最大值. 关键思想:暴力,模拟.可以优化,因为某些大数在进行操作时,会变为已经求过的小数,之后的循环次数已求过. 代码如下: //between i,j 模拟,暴力 #include <iostream> #include <algorithm> using namespace std; int

HDU 5128 The E-pang Palace(暴力)

The E-pang Palace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) Total Submission(s): 251    Accepted Submission(s): 93 Problem Description E-pang Palace was built in Qin dynasty by Emperor Qin Shihuang in Xiany

HDU 4831 Scenic Popularity 暴力模拟

Scenic Popularity Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 340    Accepted Submission(s): 110 Problem Description 临近节日,度度熊们最近计划到室外游玩公园,公园内部包括了很多的旅游景点区和休息区,由于旅游景点很热门,导致景点区和休息区都聚集了很多人.所以度度熊

HDU 4876 ZCC loves cards(暴力剪枝)

HDU 4876 ZCC loves cards 题目链接 题意:给定一些卡片,每个卡片上有数字,现在选k个卡片,绕成一个环,每次可以再这个环上连续选1 - k张卡片,得到他们的异或和的数,给定一个L,问能组成[L,R]所有数字的情况下,R的最大值是多少 思路:暴力C(20, 6),然后对于每个序列去全排后模拟计算值, 不过之前要有个剪枝,全排前,先把k个数随机取数(即不用连续),然后如果这样还满足不了,那么连续的情况肯定也满足不了,直接结束,不进入全排.这样一来由于满足不了的情况实际上是占绝大

java新手的第一个小东西,或许小东西都算不上=。 =

import java.util.ArrayList; import java.util.Scanner; /** * 系统类 * * @author Administrator * */ public class Systems { private Scanner input = new Scanner(System.in); private Database db = new Database(); //用户数据库 private ArrayList<Users> usersList =

hdu 4841 圆桌问题(用vector模拟约瑟夫环)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4841 圆桌问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 104    Accepted Submission(s): 17 Problem Description 圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第一

hdu 1195:Open the Lock(暴力BFS广搜)

mediaxyz是一位研究ffmpeg有三年的高人了,这几天一直在折腾ffmpeg中的x264,就是不知道该如何控制码率,主要是参数太多,也不知道该如何设置,在 google上search了一下,这方面的介绍为0,那就找mediaxyz请教请教吧,这些可都是经验,非常宝贵! 以下是与mediaxyz在QQ上聊天的记录,只有一部分,因为QQ把之前的谈话删除了,但基本上精髓都可这里了. mediaxyz 23:40:26你说的qsable是c->global_quality吧 Leon 23:40: