HDU
来源:互联网 发布:linux 中telnet命令 编辑:程序博客网 时间:2024/06/04 00:22
问题本质:给定点集,判断线段相交
运用方法:叉积(方向性)判线段相交
代码中 的 is_inter 函数 判断 线段a-b 和 c-d 是否相交
需要6个条件,其中 area 函数是假的面积,只是为了提供一个正负性(可以先去学一波向量的叉积)
#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<cmath>#include<set>#include<queue>#include<stack>#include<map>#define PI acos(-1.0)#define in freopen("in.txt", "r", stdin)#define out freopen("out.txt", "w", stdout)using namespace std;typedef long long ll;typedef unsigned long long ull;const int maxn = 30 + 7, maxd = 100 + 7, mod = 1e9 + 7;const ll INF = 0x7f7f7f7f;int n, a[maxn];struct node { ll x, y;}p[maxn][maxd];ll area(node a, node b, node c) { return (b.x-a.x)*(c.y-a.y) - (b.y-a.y)*(c.x-a.x);}bool is_inter(node a, node b, node c, node d) { if(max(a.x, b.x) > min(c.x, d.x) && max(c.x, d.x) > min(a.x, b.x) && max(a.y, b.y) > min(c.y, d.y) && max(c.y, d.y) > min(a.y, b.y) && area(a, b, c) * area(a, b, d) <= 0 && area(c, d, a) * area(c, d, b) <= 0 ) return 1; return 0;}bool is_ok() { for(int l1 = 1; l1 < n; ++l1) { for(int l2 = l1+1; l2 <= n; ++l2) { for(int i = 1; i < a[l1]; ++i) { for(int j = 1; j < a[l2]; ++j) { if( is_inter(p[l1][i], p[l1][i+1], p[l2][j], p[l2][j+1]) ) return 1; } } } } return 0;}int main() { int i, j; while(~scanf("%d", &n)) { for(int i = 1; i <= n; ++i) { scanf("%d", &a[i]); for(int j = 1; j <= a[i]; ++j) { scanf("%I64d %I64d", &p[i][j].x, &p[i][j].y); } } if(n == 1) puts("No"); else printf("%s\n", is_ok() ? "Yes" : "No"); } return 0;}
阅读全文
1 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- JavaScript高级程序设计第三章之操作符
- leetcode4
- Ubuntu jdk、eclipse的安装和从github导入project
- html&css--------其他标记(11/1)
- SSL2522 2014年汕头市选拔赛普级组 约数(线性筛素数)
- HDU
- Elastic Job入门
- nginx源码阅读(五).worker进程的工作循环
- 在linux下学习收获总结
- 带你理解 JS 容易出错的坑和细节
- 从服务器返回的HTTP状态码和与之关联的消息
- 文件复习题
- Android Studio 3.0 新功能解析和旧项目适配
- 学习文档