题目链接:点击查看

题意:从一给出的点出发可以向任意方向发出射线,然后现在平面上共有1500条线段,问最多能使射线和几条线段相交

题解:每个线段都有一个对应的角度范围,刚开始想的是离散化一下,求一下哪个范围包括的最多,但是对应的范围是一个360度的圈,没法操作,然后注意到了数据只有1500,这样就可以暴力所有的端点,枚举每一条线段判断是否相交即可,射线我们可以抽象成线段,先判断射线的方向,然后把另一端点x设成10000,或-10000 ,y坐标相似求一下即可

两线段相交模板:点击查看,用过好几次了,挺好用的,可以保存一下。

#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=50010;
struct node{int x1,y1,x2,y2;
}aa[1100];
struct node1{int x,y;
}p[2100];
struct Point{double x,y;
};
int n,len;
int xx,yy;
map<int,map<int,int> > mp;
bool judge(int i,int j)
{Point a,b,c,d;a.x=xx;a.y=yy;if(p[i].x==xx){b.x=p[i].x;if(p[i].y>yy) b.y=10000;else b.y=-10000;}else if(p[i].x>xx){b.x=10000;b.y=(double)(10000.0-xx)/(p[i].x-xx)*(p[i].y-yy)+yy;}else{b.x=-10000;b.y=(double)(xx+10000)/(xx-p[i].x)*(p[i].y-yy)+yy;}c.x=aa[j].x1;c.y=aa[j].y1;d.x=aa[j].x2;d.y=aa[j].y2;if(!(min(a.x,b.x)<=max(c.x,d.x) && min(c.y,d.y)<=max(a.y,b.y)&&min(c.x,d.x)<=max(a.x,b.x) && min(a.y,b.y)<=max(c.y,d.y)))return false;double u,v,w,z;u=(c.x-a.x)*(b.y-a.y)-(b.x-a.x)*(c.y-a.y);v=(d.x-a.x)*(b.y-a.y)-(b.x-a.x)*(d.y-a.y);w=(a.x-c.x)*(d.y-c.y)-(d.x-c.x)*(a.y-c.y);z=(b.x-c.x)*(d.y-c.y)-(d.x-c.x)*(b.y-c.y);return (u*v<=0.00000001 && w*z<=0.00000001);
}
int main()
{int T;int x,y;scanf("%d",&T);while(T--){len=0;mp.clear();scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d%d%d%d",&aa[i].x1,&aa[i].y1,&aa[i].x2,&aa[i].y2);if(!mp[aa[i].x1][aa[i].y1]){mp[aa[i].x1][aa[i].y1]=1;p[++len].x=aa[i].x1;p[len].y=aa[i].y1;}if(!mp[aa[i].x2][aa[i].y2]){mp[aa[i].x2][aa[i].y2]=1;p[++len].x=aa[i].x2;p[len].y=aa[i].y2;}}scanf("%d%d",&xx,&yy);int ans=0;for(int i=1;i<=len;i++){int cnt=0;for(int j=1;j<=n;j++)if(judge(i,j))cnt++;ans=max(cnt,ans);}printf("%d\n",ans);}return 0;
}

POJ - 4048 Chinese Repeating Crossbow 暴力枚举+线段香蕉?相关推荐

  1. 暴力枚举(字符串匹配)-Blue Jeans POJ - 3080

    暴力枚举(字符串匹配)-Blue Jeans POJ - 3080 题目: Genographic项目是IBM与国家地理学会之间的研究合作伙伴关系,该合作伙伴正在分析数十万贡献者的DNA,以绘制地球的 ...

  2. POJ 3174 暴力枚举

    思路: 暴力枚举三个点 判一判 搞定 (x1*y1=x2*y2) x1.y1.x2.y2为他们两两的差 //By SiriusRen #include <cstdio> using nam ...

  3. 【POJ - 2965】The Pilots Brothers' refrigerator(暴力枚举,思维)

    题干: The game "The Pilots Brothers: following the stripy elephant" has a quest where a play ...

  4. codeforces数学1600day6[CodeForces - 1029C多区间交+枚举,CodeForces 992C[数学公式推导],CodeForces 992B[质因数分解+暴力枚举]]

    A - Maximal Intersection CodeForces - 1029C 题目大意:就是给你n个区间,这n个区间有公共的区间长度为x,现在叫你从这n个区间中删掉一个使得x最大化. 解题思 ...

  5. POJ 2429 GCD LCM Inverse ★(pollard-ρ DFS枚举)

    题目链接:http://poj.org/problem?id=2429 题目大意:给定gcd(a,b)和lcm(a,b)(<2^63),求a和b,如果有多种情况,输出和最小的情况.   首先gc ...

  6. 最大字段和 冲出暴力枚举

    这篇解题报告是对我最近一些题的总结,里面的代码都是我解题,优化,再优化的过程的记录,记录了自己对算法的完善与优化思路,还有对编程哲学的理解:do it,do it well. 很感谢孙老师您,让自己可 ...

  7. hdu 4587 TWO NODES 暴力枚举+tarjan

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4587 题意是拿掉两个点 求最多可以把整个图分成几个联通块 注意到有一个模板是可以通过找割点来快速求出 ...

  8. 一道暴力枚举题Win32版本示例

    来看一个问题:该问题的解法是 暴力枚举:这大概是ACM方面的:名称叫火柴棒等式: 给你n根火柴棍,你可以拼出多少个形如"A+B=C"的等式?等式中的A.B.C是用火柴棍拼出的整数( ...

  9. C. Divisibility by Eight【暴力枚举】

    暴力枚举即可.枚举1位这种情况,枚举2位这种情况,枚举3位这种情况. 3位满足足以,其他的4位,5位...都包含1000必定满足. #include<bits/stdc++.h> usin ...

最新文章

  1. .NET平台开源项目速览(8)Expression Evaluator表达式计算组件使用
  2. java窗体添加背景图片_Java项目实战之实战之天天酷跑(四):游戏主界面
  3. hikaridatasource 加密后登陆不上_渗透测试 | 突破前端JS加密限制
  4. 靠加班?靠团建?靠个人?请停止无效努力!
  5. python 类变量和实例变量
  6. linux 修改文件可执行,linux下用chmod修改文件为可执行文件
  7. Swift学习几天就会写项目
  8. redis 下载安装 python 操作redis django 连接redis
  9. Orcad Pspice仿真
  10. SIM868模块+Arduino将位置信息上传到服务器
  11. Echarts实现柱状图下钻功能
  12. 数据可视化设计作品,有时候更直击人心!
  13. 美团点评女技术总监任登君:不要给自己的人生设限
  14. ACM素数打表(模版)
  15. QtQuick串口编程Demo
  16. confluence工具
  17. MacBook苹果电脑在充电中无法指纹解锁解决办法
  18. 【精髓】Laravel 模型关联
  19. 数据结构第二章(单链表部分)学习笔记
  20. [Python]不使用kociemba库解魔方

热门文章

  1. RFSoC应用笔记 - RF数据转换器 -22- API使用指南之配置DAC相关工作状态和中断相关函数使用
  2. HIS 与医保系统的接入方案及实现
  3. 关于python 关于面向对象 关于magic method(魔方方法)
  4. 解决浏览器能上网而其他软件无法联网的问题
  5. 护眼灯哪些牌子好?央视推荐的护眼台灯
  6. STM32标准库、HAL库特点与应用
  7. 为什么只有奇次谐波_奇次谐波与偶次谐波的治理区别
  8. BIM技术都是如何应用于水利工程中
  9. 洛谷P1796 汤姆斯的天堂梦【DP-数字三角形模型】【橙】
  10. 一文教你搞定PMOS管选型