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 ...
随机推荐
- Amcharts 柱状图和线形图
最近需要学习 Amcharts ,他的图表功能确实很强大.但是网上搜索到的教程很少,开始学起的确有点不方便.于是我决定把我学习的觉得好的途径,放到博客上. 下面的代码可以直接复制,但是文件要从官网上下 ...
- How to reset XiaoMi bluetooth headphone Youth edition.
To reset the speaker 1. Long press the phone call button to shut off the speaker 2. Connect the char ...
- Daily Report-1126
今日: 上午主要是回顾了react,阅读官方文档的时候发现了list中key值设计的必要性. 看了部分react源码,发现有些吃力,在询问羽牧学长之后调整策略,从redux和mobx入手,先多熟悉用法 ...
- IE9 下 ellipsis bug fix
fiddle: http://jsfiddle.net/tagliala/TtbuG/10/ original: https://github.com/FortAwesome/Font-Awesome ...
- 在Oracle中查询表的大小
SELECT segment_name AS TABLENAME,round(BYTES/1024/1024,2) FROM user_segments WHERE segment_name='表名 ...
- flask基础之jijia2模板使用基础(二)
前言 在以前前后端不分离的时代,后台程序员往往又当爹又当妈,需要将前端程序员写的h5页面填充模板语言.而jijia2是一门十分强大的python的模板语言,是flask框架的核心模块之一.先简单介绍一 ...
- Vim的分屏功能
本篇文章主要教你如何使用 Vim 分屏功能. 分屏启动Vim 使用大写的O参数来垂直分屏. vim -On file1 file2 ... 使用小写的o参数来水平分屏. vim -on file1 f ...
- Java中Enum的使用
http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html Enum有一个好处,可以使用EnumMap和EnumSet,而En ...
- C# 解决窗体闪烁
C# 解决窗体闪烁 在Windows窗体上造成“闪烁”的窗体上有很多控制.造成这种闪烁的原因有两个: 1.当控件需要被绘制时,Windows发送一个控件两个消息.第一个(WM_ERASEBKGND)导 ...
- Linux软件安装install命令
install 1.作用 install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户. 2.格式 (1)install [选项]... 来源 目的地 (2)install [选项]. ...