使用叉积进行极角排序HDU1661

来源:互联网 发布:深圳软件产业基地 编辑:程序博客网 时间:2024/05/20 16:13

解题思路:

扫描线算法。枚举任意一点,其他点依照那一点进行极角排序。扫描获得最大值。

注意:

1、因为 atan2方式的极角排序有精度误差,在这里需要用叉积方式排序。否则就自己慢慢测精度去吧!

2、用叉积方式的极角排序需要将排序的点提前处理到两个象限范围内。注意点属性的状态转换。

3、POJ数据较弱,HDU数据较强。两个OJ都是C++较慢。

  1. #include <set>  
  2. #include <map>  
  3. #include <queue>  
  4. #include <math.h>  
  5. #include <vector>  
  6. #include <string>  
  7. #include <stdio.h>  
  8. #include <string.h>  
  9. #include <stdlib.h>  
  10. #include <iostream>  
  11. #include <algorithm>  
  12.   
  13. #define eps 1e-8  
  14. #define pi acos(-1.0)  
  15. #define inf 107374182  
  16. #define inf64 1152921504606846976  
  17. #define lc l,m,tr<<1  
  18. #define rc m + 1,r,tr<<1|1  
  19. #define iabs(x)  ((x) > 0 ? (x) : -(x))  
  20. #define clear1(A, X, SIZE) memset(A, X, sizeof(A[0]) * (SIZE))  
  21. #define clearall(A, X) memset(A, X, sizeof(A))  
  22. #define memcopy1(A , X, SIZE) memcpy(A , X ,sizeof(X[0])*(SIZE))  
  23. #define memcopyall(A, X) memcpy(A , X ,sizeof(X))  
  24. #define max( x, y )  ( ((x) > (y)) ? (x) : (y) )  
  25. #define min( x, y )  ( ((x) < (y)) ? (x) : (y) )  
  26.   
  27.   
  28. using namespace std;  
  29.   
  30. int n,pointnum,ans,cnt,l,r,sum,num,p;  
  31.   
  32. struct node1  
  33. {  
  34.     int x,y,sta;  
  35. } Point[1005],temp[1005];  
  36.   
  37. int detmul(const node1 a,const node1 b)  
  38. {  
  39.     return a.x * b.y - b.x * a.y;  
  40. }  
  41.   
  42. bool cmp(const node1 a,const node1 b)  
  43. {  
  44.     return detmul(a,b)>0;  
  45. }  
  46.   
  47. int main()  
  48. {  
  49.     while(scanf("%d",&n),n)  
  50.     {  
  51.         for(int i=0; i<n; i++)  
  52.         {  
  53.             scanf("%d%d%d",&Point[i].x,&Point[i].y,&Point[i].sta);  
  54.         }  
  55.         ans=0;  
  56.         for(pointnum=0; pointnum<n; pointnum++)  
  57.         {  
  58.             cnt=0;  
  59.             for(int i=0; i<n; i++)  
  60.             {  
  61.                 if(i==pointnum)continue;  
  62.                 temp[cnt].x=Point[i].x-Point[pointnum].x;  
  63.                 temp[cnt].y=Point[i].y-Point[pointnum].y;  
  64.                 temp[cnt].sta=Point[i].sta;  
  65.                 if(temp[cnt].y<0||(temp[cnt].y==0&&temp[cnt].x<0))  
  66.                 {  
  67.                     temp[cnt].x*=-1;  
  68.                     temp[cnt].y*=-1;  
  69.                     temp[cnt].sta=!temp[cnt].sta;  
  70.                 }  
  71.                 cnt++;  
  72.             }  
  73.             sort(temp,temp+cnt,cmp);  
  74.             l=0;  
  75.             r=0;  
  76.             sum=0;  
  77.             for(int i=0;i<cnt;i++)  
  78.             {  
  79.                 if(temp[i].sta==0)l++;  
  80.             }  
  81.             for(int i=0;i<cnt;i=p)  
  82.             {  
  83.                 num=0;  
  84.                 for(p=i;p<cnt;p++)  
  85.                 {  
  86.                     if(detmul(temp[i],temp[p]))break;  
  87.                     if(temp[p].sta)r++;  
  88.                     else num++;  
  89.                 }  
  90.                 sum=max(sum,l+r+1);  
  91.                 sum=max(sum,cnt-l-r+p-i+1);  
  92.                 l-=num;  
  93.             }  
  94.             ans=max(ans,sum);  
  95.         }  
  96.         printf("%d\n",ans);  
  97.     }  
  98.     return 0;  
  99. }  

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 魔域帐号忘了哪个区的了怎么办 魔域口袋版幻兽栏满了怎么办 苹果平板的密码和邮箱都忘了怎么办 二级报名忘了邮箱和密码怎么办 用身份证买的手机号变成空号怎么办 魔域口袋版背包幻兽满了怎么办? 魔域宝宝转世满了还不变雷怎么办 魔域口袋版家族试炼士气不足怎么办 聚水潭暂存位没有箱号怎么办? 长时间不锻炼运动后浑身酸痛怎么办 体脂称身体年龄比实际年龄大怎么办 分手两天我好难过好想去找他怎么办 宝宝一吃药就哭得很厉害怎么办 比你入职晚的同事比你厉害怎么办 nba篮球大师能力值满了怎么办 做什么都觉得很累没有兴趣怎么办 剧烈运动后头晕恶心想吐怎么办 剧烈运动完头晕恶心想吐怎么办 小孩头部摔到地上想吐头晕怎么办 肺部化疗恶心反胃怎么办吃什么药好 好久没运动一运动全身酸痛怎么办 怀孕两个月了一直吐没体力怎么办 公务员审查六级口语证丢了怎么办 农资经营如果被执法查处了怎么办? 干隧道测量坚持不下去该怎么办 老家房子强拆没钱做没钱补怎么办? 魔兽世界出了两个一样的传说怎么办 死亡事故后遇上不讲理家属怎么办 死亡事故后死亡者家属不讲理怎么办 住的地方治安乱混混多怎么办 使命召唤进去感觉动作好慢怎么办 40岁后不够硬不持久怎么办 如果别人毁灭了你的梦想怎么办 如果死者托梦说自己过的不好怎么办 吵架了老婆跑回娘家不回家了怎么办 和老婆吵架她跑回娘家了怎么办 鞋子里面的皮穿的都是泥怎么办 绝地求生手游模拟器键位不灵怎么办 我更新目录的时候目录不存在怎么办 如果别人欠我钱不还 我该怎么办 老婆欠信用卡的钱我该怎么办