模拟。

先判断三边形和四边形的个数。

然后判断$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 七巧板的更多相关文章

  1. 结队开发项目——七巧板NABC需求分析

    NABC需求分析   我们团队项目为七巧板取了个洋气的名字叫7-magic. 怀念过去,把握现在,展望未来:立足经典,勇于创新,开创一个七巧板的新时代. 特点:可以保存图片或上传至微信平台    N ...

  2. HDU 3265 Posters (线段树+扫描线)(面积并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3265 给你n个中间被挖空了一个矩形的中空矩形,让你求他们的面积并. 其实一个中空矩形可以分成4个小的矩 ...

  3. HDU 3265 Posters(线段树)

    HDU 3265 Posters pid=3265" target="_blank" style="">题目链接 题意:给定一些矩形海报.中间有 ...

  4. 纯CSS3打造七巧板

    原文:纯CSS3打造七巧板 最近项目上要制作一个七巧板,脑子里瞬间闪现,什么...七巧板不是小时候玩的吗... 七巧板的由来 先来个科普吧,是我在查资料过程中看到的,感觉很有意思. 宋朝有个叫黄伯思的 ...

  5. [js高手之路] html5 canvas教程 - 绘制七巧板

    七巧板长什么样? 用canvas把他画出来,其实就是把这7个区域的图形,每个点的坐标找出来,再用moveTo, lineTo连线,设置不同的颜色即可. <head> <meta ch ...

  6. 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 秒 内存限制:  ...

  7. EOJ #276

    题面 感觉是个套路题,不是特别难(然而卡常 直接做不可做,改成算每个数的贡献 暴力的想法是容斥,即记录每个数在每行里的出现情况,从总方案中扣掉每一行都没选到这个数的方案,复杂度$O(n^3)$ 我们发 ...

  8. canvas练习 - 七巧板绘制

    用到的方法: 注意点: stokeStyle等样式要在stroke前边 如果最后只有一个stroke或者fill,那么只填充最后一次路径的,之前的也会画出来但是没有填充看不到.所以每次begin+cl ...

  9. EOJ Monthly 2018.8 D. Delivery Service-树上差分(边权/边覆盖)(边权转点权)(模板题)

    D. Delivery Service 单测试点时限: 2.5 秒 内存限制: 512 MB EOJ Delivery Service Company handles a massive amount ...

随机推荐

  1. OpenCV---其他形态学操作

    一:顶帽实现(原图像与开操作图像的差值) import cv2 as cv import numpy as np def top_hat_demo(image): gray = cv.cvtColor ...

  2. OpenCV---直方图的应用(均衡化和图像比较)

    一:全局直方图均衡化(对比度增强)equalizeHist def equalHist_demo(image): #OpenCV直方图均衡化都是基于灰度图像 gray = cv.cvtColor(im ...

  3. 树形dp的进阶 (一)

    ①树的重心的性质的运用 ②缩点以后寻找规律  树的直径! ③树形dp上的公式转换 ④和期望有关的树形dp + 一点排列组合的知识 ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ 一:Codeforces Round #364 ...

  4. Maven项目Eclipse启动时报错: java.lang.ClassNotFoundException: org.springframework.web.util.IntrospectorCleanupListener

    Eclipse中启动Maven项目时报如下错误: 严重: Error configuring application listener of class org.springframework.web ...

  5. Plan

    相册Gallery 标签页 Slide 播放器 Dialog 放大镜 http://sc.chinaz.com/info/130123265570.htm

  6. 01 DIV+CSS 固定页面布局

    本文讲解使用DIV+CSS布局最基本的内容,读完本文你讲会使用DIV+CSS进行简单的页面布局. DIV+CSS布局中主要CSS属性介绍: Float: Float属性是DIV+CSS布局中最基本也是 ...

  7. Intellij IDEA 快捷键整理(转)

    Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文件 Shift+Click,可以关闭文件 C ...

  8. 【BZOJ】4596: [Shoi2016]黑暗前的幻想乡

    [题意]给定n个点的无向完全图,有n-1个公司各自分管一部分路,要求所有公司都有修路的生成树数.n<=17. [算法]容斥原理+生成树计数(矩阵树定理) [题解]每个生成树方案是一个公司有无修路 ...

  9. Django之前端插件定制之表头

    什么是插件? 插件只是辅助,是开发过程中的一个阶段.一般项目一期会用各种插件,迅速将功能.界面搭出来,二期时就改成自己的代码了.大点的公司都有自己的js库,自己开发类似jquery的库. 那接下来就写 ...

  10. Ubuntu 下 CodeBlocks 修改用户自定义颜色主题 及 更新CodeBlocks到最新版本

    Code::Blocks默认的白色编辑器界面看久了眼睛很累, 所以想换成dark的主题, 眼睛会舒服些. 1. 安装好codeblocks后, 先运行一次, 关闭, 这时程序会提示你是否要保存defa ...