Four Segments CodeForces - 14C
2021/8/26 23:06:53
本文主要是介绍Four Segments CodeForces - 14C,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
原题链接
考察:计算几何,枚举
思路:
枚举所有线段排列方案.检查以下条件:
- 两条线平行,相连两条线垂直.
- 边的长度都\(>0\)
- 都是直角
判断向量平行和垂直: GO
Code
#include <iostream> #include <cstring> #include <map> #include <cmath> using namespace std; const int N = 10; typedef long long LL; typedef pair<int,int> PII; struct Node{ int x1,y1,x2,y2; LL dist; }node[N]; map<PII,int> mp; double Dist(Node i) { LL d = (LL)(i.x1-i.x2)*(i.x1-i.x2)+(LL)(i.y1-i.y2)*(i.y1-i.y2); return d; } bool ck_px(Node s,Node e) { int a = s.x1-s.x2,b = s.y1-s.y2; int c = e.x1-e.x2,d = e.y1-e.y2; if(a&&b) return 0; if(c&&d) return 0; if(!a&&!c) return 1; if(!d&&!b) return 1; return 0; } bool ck_cz(Node s,Node e) { int a = s.x1-s.x2,b = s.y1-s.y2; int c = e.x1-e.x2,d = e.y1-e.y2; LL z = (LL)a*c+(LL)b*d; return z==0; } bool check() { for(auto& it:mp) if(it.second!=2) return 0; for(int i=1;i<=4;i++) if(node[i].dist) for(int j=1;j<=4;j++) if(j!=i&&node[j].dist) for(int k=1;k<=4;k++) if(k!=j&&k!=i&&node[k].dist) for(int t=1;t<=4;t++) if(t!=k&&t!=j&&t!=i&&node[t].dist) { if(node[i].dist+node[j].dist!=node[k].dist+node[t].dist) continue; if(node[i].dist+node[t].dist!=node[k].dist+node[j].dist) continue; if(node[i].dist!=node[k].dist) continue; if(node[j].dist!=node[t].dist) continue; if(!ck_px(node[i],node[k])||!ck_px(node[j],node[t])) continue; if(!ck_cz(node[i],node[j])||!ck_cz(node[j],node[k])||!ck_cz(node[k],node[t])||!ck_cz(node[t],node[i])) continue; return 1; } return 0; } int main() { for(int i=1;i<=4;i++) { int a,b,c,d; scanf("%d%d%d%d",&a,&b,&c,&d); mp[{a,b}]++,mp[{c,d}]++; node[i] = {a,b,c,d}; node[i].dist = Dist(node[i]); } if(check()) puts("YES"); else puts("NO"); return 0; }
这篇关于Four Segments CodeForces - 14C的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享