[floyed][叉积][距离公式](JZOJ)泽泽在巴西
来源:互联网 发布:淘宝面膜代理 编辑:程序博客网 时间:2024/05/17 02:56
题目描述
泽泽帮助了英国某街道尽量减少酸雨的伤害,街道办主任非常感激他,就把他领到一扇门前,告诉他这扇门能通往好地方,具体好到什么程度要看泽泽人品。泽泽毫不犹豫地走了进去……
泽泽来到了足球王国——巴西。这可是个好地方,泽泽看来人品攒了不少了。这里大街小巷都在踢足球,其乐无穷。
突然,泽泽被一个人拎了起来,一看,是个足球流氓。他后面跟了一大群足球流氓,正虎视眈眈地看他。他们要求和泽泽比赛,输了就要揍他。
没办法,泽泽硬着头皮和足球流氓另外掳来的几个人一起组建了一只队伍,和足球流氓队比赛。
比赛开始,泽泽队率先发球。泽泽观察了四周,想怎么才能用最短的时间射门呢?
射门的时间为距离*2,而传球的时间是距离*1。所以泽泽想找一条用时最少的射门路径,来打败足球流氓。
足球流氓当然不会袖手旁观,他们会拦截。当泽泽队伍中的传球人、被传球人之间有某足球流氓并且他们在同一直线上时,传球不会成功,即不能这样传球。比如A(1,2)想传球给B(7,8),中间有个足球流氓C(3,4),则他们在同一直线,传球不成功。射门不受足球流氓影响。
分析
好难啊,都不想写题解了。。。
floyed人人都会,就说一下判断足球流氓拦截吧:首先要判断足球流氓是否在队友和队友形成的矩阵之间:
然后叉积:
P1=(X1,Y1),P2=(X2,Y2),P0=(X0,Y0)
m=(x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0)
如果m等于0那么这三点就在一条直线上了!
还有射门的距离要*2(这个非常重要!)
【代码可能有些地方很繁琐,没办法,安全起见】
#include <iostream>#include <cstdio>#include <cmath>#include <memory.h>using namespace std;int n,m,i,j,k,a[401][401];float f[401][401];float min(float a,float b){ if (a<b) return a; else return b;}bool tf(float x1,float y1,float x2,float y2,float x3,float y3){ if ((x1-x3)*(y2-y3)-(x2-x3)*(y1-y3)!=0) return true; if (sqrt(pow(x1-x2,2)+pow(y1-y2,2))<sqrt(pow(x1-x3,2)+pow(y1-y3,2))|| sqrt(pow(x1-x2,2)+pow(y1-y2,2))<sqrt(pow(x2-x3,2)+pow(y2-y3,2))) return true; return false;}int main(){ float o; freopen("brazil.in","r",stdin); freopen("brazil.out","w",stdout); memset(f,100,sizeof(f)); scanf("%d%d%d%d",&a[0][1],&a[0][2],&n,&m); for (i=1;i<=n+m;i++) scanf("%d%d",&a[i][1],&a[i][2]); for (i=1;i<=n;i++) for (j=i+1;j<=n;j++) for (k=n+1;k<=n+m;k++) if (i!=j&&i!=k&&tf(a[i][1],a[i][2],a[j][1],a[j][2],a[k][1],a[k][2])) { o=pow((float) a[i][1]-a[j][1],2)+pow((float)a[i][2]-a[j][2],2); f[i][j]=sqrt(o); f[j][i]=f[i][j]; } for (i=1;i<=n;i++) { o=pow((float)a[i][1]-a[0][1],2)+pow((float)a[i][2]-a[0][2],2); f[i][0]=sqrt(o)*2; f[0][i]=f[i][0]; } for (i=0;i<=n;i++) for (j=0;j<=n;j++) for (k=0;k<=n;k++) f[i][j]=min(f[i][j],f[i][k]+f[k][j]); printf("%.f",f[0][1]); return 0;}
- [floyed][叉积][距离公式](JZOJ)泽泽在巴西
- jzoj P1337 【2011.12.10普及模拟】泽泽在巴西
- 泽泽在巴西(jzoj普及组模拟第三题)(超难)
- 泽泽在巴西
- 泽泽在巴西
- 1579 泽泽在巴西
- 泽泽在巴西_ssl1579_最短路
- SSL1579 泽泽在巴西(spfa)
- 【SSLGZ 1579】泽泽在巴西
- SSL 1579——泽泽在巴西
- 距离公式
- SSL 1579_泽泽在巴西_计算几何+spfa
- jzoj P1135 【2011.12.10普及模拟】泽泽在中国
- jzoj P1336 【2011.12.10普及模拟】泽泽在英国
- jzoj P1338 【2011.12.10普及模拟】泽泽在埃及
- 马氏距离公式在图像中的推演
- 巴西
- 两点距离公式--平方根
- 355. Design Twitter
- 程序的运行机制——CPU、内存、指令的那些事
- Eclipse 下配置和创建第一个 JSP 项目
- shell分割大文件
- 数据采集之Web端上传文件到Hadoop HDFS
- [floyed][叉积][距离公式](JZOJ)泽泽在巴西
- 【Java实现KNN算法】KNN(k邻近)详解与java实现
- Spring框架开发实现对商品列表的增删改查以及批量删除和批量修改
- #include<cstdlib> #include<cstdio> #include<cstring> using namespace std; int w[25][25][25]; bool vi
- Java学习之HashMap和Hashtable的区别(转)
- MYSQL创建、授权、撤销、查看、删除用户
- request.getParameter() 和request.getAttribute() 区别
- AngularJS 开发者最常犯的 10 个错误
- 【Android 基础】Android按钮实现事件监听器四种常用形式+拓展几种形式