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 ...
随机推荐
- CentOS7.2下安装mongoDB3.2.8
最近在又在倒腾MongoDB,把安装配置的相关命令贴出来 1.下载 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70- ...
- elasticsearch创建索引
1.通过elasticsearch-head 创建 (1)登录localhost:9100 (2)点击复合查询 (3)输入内容 (4)勾选易读,点击验证是否是JSON格式 (5)点击提交请求,返回 { ...
- python初步学习-面向对象之 类(二)
方法重写 如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法: #!/usr/bin/env python #coding:utf8 class Parent: def myMeth ...
- C - A New Function (整除分块 + 玄学优化)
题目链接:https://cn.vjudge.net/contest/270608#problem/C 题目大意:给你一个n,让你求从1->n中间每个数的因子之和(每个数在求因子的过程中不包括本 ...
- python并发编程之Queue线程、进程、协程通信(五)
单线程.多线程之间.进程之间.协程之间很多时候需要协同完成工作,这个时候它们需要进行通讯.或者说为了解耦,普遍采用Queue,生产消费模式. 系列文章 python并发编程之threading线程(一 ...
- ansible报错Aborting, target uses selinux but python bindings (libselinux-python) aren't installed
报错内容: TASK [activemq : jvm configuration] ********************************************************** ...
- Java的BIO,NIO,AIO
Java中的IO操作可谓常见.在Java的IO体系中,常有些名词容易让人困惑不解.为此,先通俗地介绍下这些名词. 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同 ...
- day01作业
Java技术按照用途不同分为三大版本,分别是JavaSE.JavaEE和JavaMeJava虚拟机就是一个虚拟的用于执行字节码文件的计算机.它是Java最核心的技术,是Java跨平台的基础.DOS命令 ...
- ASP.NET Core 2.0 MVC 发布部署--------- IIS 具体操作
.Net Core 部署到 IIS系统中的步骤 一.IIS 配置 启用 Web 服务器 (IIS) 角色并建立角色服务. 1.Windows Ddesktop 桌面操作系统(win7及更高版本) 导航 ...
- request机制
每个框架中都有处理请求的机制(request),但是每个框架的处理方式和机制是不同的 为了了解Flask的request中都有什么东西,首先我们要写一个前后端的交互 基于HTML + Flask 写一 ...