Codeforces Round #271 (Div. 2) C. Captain Marmot (暴力枚举+正方形判定)
来源:互联网 发布:程序编程和软件开发 编辑:程序博客网 时间:2024/05/16 13:05
题目链接:Codeforces Round #271 (Div. 2) C. Captain Marmot
题意:给4行数据,每行2个点。(x,y).(a,b)。意思是(x,y)绕(a,b)逆时针旋转90度。问最少的旋转次数使(x,y)的四个点形成一个正方形。
思路:
处理出 点旋转后 4种情况的点。
暴力查找哪四个点可以形成正方形。
正方形判定:
a,b,c,d四个点。
1.处理处4个点两两组合的边。ab,ac,ad,bc,bd,cd、
2.排序,把边分成2组,2组内的大小相等。2条边的作为对角线(l1)。4条边的作为边长(l2)。
3.l2==(根号2)*l2、则是正方形。else 都不是。
在处理的过程正用算角度,开根号。注意精度问题。
AC代码:
#include<stdio.h>#include<math.h>#include<string.h>#include<algorithm>using namespace std;const double PI=acos(-1.0);const double tt=sqrt(2.0);const double eps=1e-7;struct point{ double x,y;};struct point p[10][10];point change(double x,double y,double a,double b,double c){ c=c*PI/180.0; point h; x-=a,y-=b; h.x=cos(c)*x-sin(c)*y+a; h.y=sin(c)*x+cos(c)*y+b; return h;}double dist(point a,point b){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}bool ok(point a,point b,point c,point d){ int i; double dis[10]; dis[0]=dist(a,b); dis[1]=dist(a,c); dis[2]=dist(a,d); dis[3]=dist(b,c); dis[4]=dist(b,d); dis[5]=dist(c,d); sort(dis,dis+6);//从小到大 if(fabs(dis[0]-dis[1])<eps && fabs(dis[1]-dis[2])<eps && fabs(dis[2]-dis[3])<eps)//边长 { if(fabs(dis[0]-dis[4])>eps && fabs(dis[4]-dis[5])<eps) { if(fabs(dis[0]*tt-dis[4])<eps) return true; } } return false;}int main(){ int t,i,j,k,z,qiuguo; scanf("%d",&t); while(t--) { for(i=0;i<4;i++) { double x,y,a,b; scanf("%lf %lf %lf %lf",&x,&y,&a,&b); p[i][0].x=x; p[i][0].y=y; p[i][1]=change(x,y,a,b,90.0); p[i][2]=change(x,y,a,b,180.0); p[i][3]=change(x,y,a,b,270.0); } bool h=ok(p[0][0],p[1][1],p[2][0],p[3][0]); int flag=0,min=1000000; for(i=0;i<4;i++) { for(j=0;j<4;j++) { for(k=0;k<4;k++) { for(z=0;z<4;z++) { if(ok(p[0][i],p[1][j],p[2][k],p[3][z])) { if(min>i+j+k+z) min=i+j+k+z; flag=1; } } } } } if(flag) printf("%d\n",min); else printf("-1\n"); } return 0;}
0 0
- Codeforces Round #271 (Div. 2) C. Captain Marmot (暴力枚举+正方形判定)
- 【Codeforces Round 271 (Div 2)C】【暴力 坐标变换】Captain Marmot 四个点绕中心旋转 最小步数使得构成正方形
- Codeforces Round #271 (Div. 2) C. Captain Marmot
- C. Captain Marmot (Codeforces Round #271)
- Captain Marmot(Codeforces Round #271 div2) C
- Codeforces 474c Captain Marmot | 暴力几何
- 【CODEFORCES】 C. Captain Marmot
- CF 474C Captain Marmot[暴力枚举 || bfs状态压缩 ]
- Codeforces 474C Captain Marmot 暴力+几何(绕定点旋转)
- Codeforces 474 C. Captain Marmot
- CodeForces 474C - Captain Marmot
- Codeforces Round #243 (Div. 2) A,B,C(暴力枚举)
- codeforces 474c C. Captain Marmot
- codeforces 474C Captain Marmot dfs
- Codeforces Round #340 (Div. 2) C. Watering Flowers(暴力枚举)
- Codeforces 474C Captain Marmot 给定4个点和各自旋转中心 问旋转成正方形的次数
- Codeforces Round #340 (Div. 2)C. Watering Flowers(暴力)
- Codeforces Round #239 (Div. 2) C Triangle(暴力)
- Java-Iterator的用法
- zoj3715Kindergarten Election(枚举+贪心)
- 本地jar包依赖和运行包
- android_Intent对象初步(Activity传值)
- Thrift Java使用实例(修改版)
- Codeforces Round #271 (Div. 2) C. Captain Marmot (暴力枚举+正方形判定)
- Android应用开发从无到有
- 读《九败一胜—美团创始人王兴创业十年》有感
- 学习笔记——SSH开发常见问题--JsonException
- jquery的flot显示前loading图的demo
- CPU检测硬件中断的机制分析
- IDisposable
- PHP彩蛋
- mknod