首页 > 代码库 > poj1244Slots of Fun
poj1244Slots of Fun
链接
几何的简单题,建立坐标,判断相等以及不共线
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stdlib.h> 6 #include<vector> 7 #include<cmath> 8 #include<queue> 9 #include<set> 10 using namespace std; 11 #define N 200 12 #define LL long long 13 #define INF 0xfffffff 14 const double eps = 1e-8; 15 const double pi = acos(-1.0); 16 const double inf = ~0u>>2; 17 char s[N],sr[30]; 18 struct Point 19 { 20 double x,y; 21 Point(double x=0,double y=0):x(x),y(y) {} 22 }p[N]; 23 vector<Point>ed[30]; 24 typedef Point pointt; 25 pointt operator + (Point a,Point b) 26 { 27 return Point(a.x+b.x,a.y+b.y); 28 } 29 pointt operator - (Point a,Point b) 30 { 31 return Point(a.x-b.x,a.y-b.y); 32 } 33 int dcmp(double x) 34 { 35 if(fabs(x)<eps) return 0; 36 else return x<0?-1:1; 37 } 38 double dis(Point a) 39 { 40 return sqrt(a.x*a.x+a.y*a.y); 41 } 42 double cross(Point a,Point b) 43 { 44 return a.x*b.y-a.y*b.x; 45 } 46 double mul(Point p0,Point p1,Point p2) 47 { 48 return cross(p1-p0,p2-p0); 49 } 50 int main() 51 { 52 int n,i,j,g,e; 53 while(scanf("%d",&n)&&n) 54 { 55 getchar(); 56 for(i = 0; i < 26 ; i++) 57 ed[i].clear(); 58 for(i = 1 ; i <= n*(n+1)/2; i++) 59 scanf("%c",&s[i]); 60 int g = 0; 61 double tx=n,ty = sqrt(3.0)*(n-1); 62 for(i = 1 ;i <= n; i++) 63 { 64 double x0 = tx-i+1; 65 double y0 = ty-(i-1)*sqrt(3.0); 66 for(j = 1; j <= i ;j++) 67 { 68 Point pp; 69 pp.y = y0; 70 pp.x = x0; 71 x0+=2; 72 g++; 73 ed[s[g]-‘a‘].push_back(pp); 74 } 75 } 76 int cnt = 0; 77 for(i = 0; i < 26 ; i++) 78 { 79 if(ed[i].size()<3) continue; 80 int k = ed[i].size(); 81 for(j = 0 ;j < k ; j++) 82 for(g = j+1 ; g < k ; g++) 83 for(e = g+1 ; e < k ; e++) 84 { 85 Point p1 = ed[i][j],p2 = ed[i][g],p3 = ed[i][e]; 86 // cout<<p1.x<<" "<<p1.y<<" "<<p2.x<<" "<<p2.y<<" "<<p3.x<<" "<<p3.y<<endl; 87 // cout<<i<<" "<<dis(p1-p2)<<" "<<dis(p1-p3)<<" "<<dis(p2-p3)<<endl; 88 if(dcmp(dis(p1-p2)-dis(p1-p3))==0&&dcmp(dis(p1-p2)-dis(p2-p3))==0&&dcmp(mul(p1,p2,p3))!=0) 89 { 90 sr[cnt++] = i+‘a‘; 91 } 92 } 93 } 94 if(cnt==0) 95 { 96 puts("LOOOOOOOOSER!"); 97 continue; 98 } 99 for(i = 0 ; i < cnt ; i++)100 printf("%c",sr[i]);101 puts("");102 }103 return 0;104 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。