EOJ 3265 七巧板
模拟。
先判断三边形和四边形的个数。
然后判断$5$个三角形是否都是等腰直角三角形。
然后判断$5$个等腰直角三角形比例是否符合要求。
然后寻找正方形。判断比例是否符合要求。
最后判断四边形是否符合要求。
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std; struct X
{
int n;
double x[5],y[5];
double len[5];
}s[10]; double eps = 1e-4; bool cmp(X a, X b)
{
return a.n<b.n;
} bool cmp1(X a, X b)
{
return a.len[3]<b.len[3];
} double dis(double p1x,double p1y,double p2x,double p2y)
{
return sqrt((p1x-p2x)*(p1x-p2x)+(p1y-p2y)*(p1y-p2y));
} int main()
{
for(int i=1;i<=7;i++)
{
scanf("%d",&s[i].n);
for(int j=1;j<=s[i].n;j++) scanf("%lf%lf",&s[i].x[j],&s[i].y[j]);
}
sort(s+1,s+1+7,cmp); int sum3 = 0, sum4 = 0; for(int i=1;i<=7;i++)
{
if(s[i].n == 3) sum3++;
if(s[i].n == 4) sum4++;
} if(sum3 != 5)
{
printf("NO\n");
return 0;
} if(sum4 != 2)
{
printf("NO\n");
return 0;
} for(int i=1;i<=7;i++)
{
for(int j=1;j<=s[i].n;j++)
{
int L = j;
int R = j+1;
if(R == s[i].n + 1) R = 1;
s[i].len[j] = dis(s[i].x[L],s[i].y[L],s[i].x[R],s[i].y[R]);
}
} for(int i=1;i<=7;i++) sort(s[i].len+1,s[i].len+1+s[i].n); //判断三角形是否均为等腰直角
for(int i=1;i<=5;i++)
{
if(abs(s[i].len[1]-s[i].len[2])>eps)
{
printf("NO\n");
return 0;
}
if(abs(s[i].len[3] - sqrt(2.0) * s[i].len[2])>eps)
{
printf("NO\n");
return 0;
}
} //判断5个三角形比例是否符合要求
sort(s+1,s+1+5,cmp1);
if(abs(s[1].len[3]-s[2].len[3])>eps)
{
printf("NO\n");
return 0;
}
if(abs(s[2].len[3] * sqrt(2.0) - s[3].len[3])>eps)
{
printf("NO\n");
return 0;
}
if(abs(s[3].len[3] * sqrt(2.0) - s[4].len[3])>eps)
{
printf("NO\n");
return 0;
}
if(abs(s[5].len[3] - s[4].len[3])>eps)
{
printf("NO\n");
return 0;
} //寻找哪个可能是正方形
int f=0,g;
for(int i=6;i<=7;i++)
if(abs(s[i].len[4] - s[i].len[1])<eps) f=i; if(f==0)
{
printf("NO\n");
return 0;
}
else if(f == 6) g = 7;
else g = 6; //判断正方形
double Len = dis(s[f].x[1],s[f].y[1],s[f].x[3],s[f].y[3]);
if(abs(s[f].len[1] * sqrt(2.0) - Len)>eps)
{
printf("NO\n");
return 0;
} if(abs(s[1].len[1] - s[f].len[1])>eps)
{
printf("NO\n");
return 0;
} //判断四边形
if(abs(s[g].len[1] - s[g].len[2])>eps)
{
printf("NO\n");
return 0;
}
if(abs(s[g].len[3] - s[g].len[4])>eps)
{
printf("NO\n");
return 0;
}
if(abs(s[g].len[2] * sqrt(2.0) - s[g].len[3])>eps)
{
printf("NO\n");
return 0;
} double pp,qq;
pp = dis(s[g].x[1],s[g].y[1],s[g].x[3],s[g].y[3]);
qq = dis(s[g].x[2],s[g].y[2],s[g].x[4],s[g].y[4]);
Len = min(pp,qq); if(abs(Len - s[f].len[1])>eps)
{
printf("NO\n");
return 0;
} printf("YES\n"); return 0;
}
EOJ 3265 七巧板的更多相关文章
- 结队开发项目——七巧板NABC需求分析
NABC需求分析 我们团队项目为七巧板取了个洋气的名字叫7-magic. 怀念过去,把握现在,展望未来:立足经典,勇于创新,开创一个七巧板的新时代. 特点:可以保存图片或上传至微信平台 N ...
- HDU 3265 Posters (线段树+扫描线)(面积并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3265 给你n个中间被挖空了一个矩形的中空矩形,让你求他们的面积并. 其实一个中空矩形可以分成4个小的矩 ...
- HDU 3265 Posters(线段树)
HDU 3265 Posters pid=3265" target="_blank" style="">题目链接 题意:给定一些矩形海报.中间有 ...
- 纯CSS3打造七巧板
原文:纯CSS3打造七巧板 最近项目上要制作一个七巧板,脑子里瞬间闪现,什么...七巧板不是小时候玩的吗... 七巧板的由来 先来个科普吧,是我在查资料过程中看到的,感觉很有意思. 宋朝有个叫黄伯思的 ...
- [js高手之路] html5 canvas教程 - 绘制七巧板
七巧板长什么样? 用canvas把他画出来,其实就是把这7个区域的图形,每个点的坐标找出来,再用moveTo, lineTo连线,设置不同的颜色即可. <head> <meta ch ...
- EOJ Monthly 2019.2 题解(B、D、F)
EOJ Monthly 2019.2 题解(B.D.F) 官方题解:https://acm.ecnu.edu.cn/blog/entry/320/ B. 解题 单测试点时限: 2.0 秒 内存限制: ...
- EOJ #276
题面 感觉是个套路题,不是特别难(然而卡常 直接做不可做,改成算每个数的贡献 暴力的想法是容斥,即记录每个数在每行里的出现情况,从总方案中扣掉每一行都没选到这个数的方案,复杂度$O(n^3)$ 我们发 ...
- canvas练习 - 七巧板绘制
用到的方法: 注意点: stokeStyle等样式要在stroke前边 如果最后只有一个stroke或者fill,那么只填充最后一次路径的,之前的也会画出来但是没有填充看不到.所以每次begin+cl ...
- EOJ Monthly 2018.8 D. Delivery Service-树上差分(边权/边覆盖)(边权转点权)(模板题)
D. Delivery Service 单测试点时限: 2.5 秒 内存限制: 512 MB EOJ Delivery Service Company handles a massive amount ...
随机推荐
- [吴恩达机器学习笔记]12支持向量机3SVM大间距分类的数学解释
12.支持向量机 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考资料 斯坦福大学 2014 机器学习教程中文笔记 by 黄海广 12.3 大间距分类背后的数学原理- Mathematic ...
- 数据分析与展示---anaconda的使用
一:安装 官方源:https://repo.continuum.io/archive/(太慢) 清华源:https://mirrors.tuna.tsinghua.edu.cn/anaconda/ar ...
- 2015年IPC网络摄像机技术发展现状分析
网络摄像机将图像转换为基于TCP/IP网络标准的数据包,使摄像机所摄的画面通过RJ-45以太网接口或WIFI WLAN无线接口直接传送到网络上,通过网络即可远端监视画面. 一.网络摄像机的基本原理 网 ...
- jdbc:oracle:thin:@localhost:1521:orcl和jdbc:oracle:thin:@localhost:1521/orcl的区别
Oracle Thin JDBC Driver 驱动程序包名:ojdbc14.jar.ojdbc6.jar 驱动程序类名: oracle.jdbc.driver.OracleDriver JDBC ...
- Eclipse 重构功能的使用与重构快捷键
重构是什么? 在代码写好之后改进它的设计. 重构分类:物理结构.类层次结构.类内部结构. 名称 快捷键 直译 作用范围 描述 Rename Alt + Shift + R 可以对任意变量.类. ...
- [数据库中间件]将用户添加到DB2组授权
1.将用户oracle添加到db2的用户组中,命令如下: usermod -a -G db2iam #将用户添加到组中并不改变当前所属组 注:以下与主题无关,只是列举一些关于用户的命令 id user ...
- Centos tomcat jmx 远程连接
jmx配置: -Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.mana ...
- 【BZOJ】1355 [Baltic2009]Radio Transmission
[算法]KMP [题解]KMP中n-next[n]得到最小循环节的性质. 考虑一个循环串(最后一个循环节可能残缺),它最长的[后缀=前缀]一定是以第二个循环节为起始位置的后缀. 正着考虑的话假设后缀T ...
- fetch and js异步介绍
http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html Javascript异步编程的4种方法 ht ...
- bzoj 2303 并查集
首先如果没有限制的话,我们可以直接求出答案,假设对于n*m的矩阵,我们最上方一行和左方的一列随意确定,那么首先这写确定的状态肯定是不会不合法的,因为我们可以调整剩下的01状态来使得这一行一列的状态合法 ...