(全国多校重现赛一)D Dying light
LsF is visiting a local amusement park with his friends, and a mirror room successfully attracts his attention. Inside the mirror room, there are n plane mirrors standing vertically on the ground. They are placed end-to-end and face-to-face so that if you overlook the room, you can find a convex hull and the all the reflector surfaces are inside the pattern. The height of the mirror is not important in this problem.
Due to imperfect manufacturing techniques, mirrors can't reflect light without lose of energy. Each mirror has a reflection efficiency k, which means if the incident light's intensity is I, the reflected light's intensity will be reduced to kI. The only exception could happen when the light precisely goes to the two mirrors' junction. In that case, the light will be completely absorbed instantly. Note the laws of reflection of light applies in all other situations, that the angle of incidence equals the angle of reflection.
Now LsF stands inside the mirror hall, and shoots a laser beam paralleled to the ground using his laser pointer. Unfortunately, his laser pointer can only shot laser beams with intensity of 1. What's worse, a laser beam is considered disappeared if its intensity is below 10−410−4. There's not much magnitude distance between the two numbers.
LsF wants to know how many touches can his laser beam make with mirrors before it disappears.
Input
The first line contains an integer n(3≤n≤1000), indicating the number of mirrors;
Then n lines follow. The ith line contains three real numbers xi,yi,ki(−109≤xi,yi≤109;0≤ki≤0.9)xi,yi,ki(−109≤xi,yi≤109;0≤ki≤0.9), which means the ith mirror's one end is at position (xi,yi)(xi,yi) and another end is at (xi+1xi+1mod n,yi+1yi+1mod n), and its reflectivity is kiki.
Next there are two real numbers Vx,Vy(-109≤Vx,Vy≤109), indicating the initial direction vector of the laser beam.
LsF is standing at the origin (0, 0).
Output
Output an integer in one line, the number of touches the laser beam could make before it disappears.
Sample Input
4
1 2 0.5
-1 0 0.5
1 -2 0.5
3 0 0.5
0 1
4
1 1 0.5
-1 1 0.5
-1 -1 0.5
1 -1 0.5
1 1
Sample Output
14
1
题解:因为0.1<=K<=0.9因此最多反射100,就一定可以消失。首先,我们判断该射线是否可以与镜面相交,如果与某一镜面相交,我们再判断是指向镜面还是反向指向镜面的,然后,我们可以计算出射线,与镜面的交点(用两个向量的投影相等)。然后更新O点与向量V;
#include<bits/stdc++.h>
using namespace std;
struct Point{
double x,y,k;
} point[2010];
Point V;
Point vec(Point a,Point b)
{
return Point{a.x-b.x,a.y-b.y};
}
double cha_ji(Point a,Point b) //判断是否相交
{
return a.x*b.y-a.y*b.x;
}
Point jiao_point(Point O,Point V,Point a,Point b)//求交点
{
double dx=a.x-b.x;
double dy=a.y-b.y;
double t= ((O.x-a.x)*dy-(O.y-a.y)*dx)/(V.y*dx-V.x*dy);
return Point{O.x+t*V.x,O.y+V.y*t};
}
double Nod(Point a,Point b)
{
return a.x*b.x+a.y*b.y;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++) scanf("%lf%lf%lf",&point[i].x,&point[i].y,&point[i].k);
Point O{0,0};
scanf("%lf%lf",&V.x,&V.y);
double power=1;
int ans=0,flag=0;
while(power>=1e-4)
{
for(int i=0;i<n;i++)
{
if(cha_ji(V,vec(point[i],O))*cha_ji(V,vec(point[(i+1)%n],O))<0)
{
Point nod=jiao_point(O,V,point[i],point[(i+1)%n]);
if(Nod(V,vec(nod,O))<0) continue;
double dx=point[(i+1)%n].x-point[i].x;
double dy=point[(i+1)%n].y-point[i].y;
Point nex=(Point) {O.x-2*dx*(dx*O.x+dy*O.y-nod.x*dx-nod.y*dy)/(dx*dx+dy*dy),O.y-2*dy*(dx*O.x+dy*O.y-nod.x*dx-nod.y*dy)/(dx*dx+dy*dy)};
V=vec(nex,nod);
O=(Point){nod.x+0.1*V.x,nod.y+0.1*V.y};
ans++;
power*=point[i].k;
break;
}
else if(cha_ji(V,vec(point[i],O))*cha_ji(V,vec(point[(i+1)%n],O))==0)
{
ans++;flag=1;
break;
}
}
if(flag) break;
}
cout<<ans<<endl;
}
return 0;
}
(全国多校重现赛一)D Dying light的更多相关文章
- (全国多校重现赛一)F-Senior Pan
Senior Pan fails in his discrete math exam again. So he asks Master ZKC to give him graph theory pro ...
- (全国多校重现赛一) J-Two strings
Giving two strings and you should judge if they are matched. The first string contains lowercase le ...
- (全国多校重现赛一) H Numbers
zk has n numbers a1,a2,...,ana1,a2,...,an. For each (i,j) satisfying 1≤i<j≤n, zk generates a new ...
- (全国多校重现赛一)E-FFF at Valentine
At Valentine's eve, Shylock and Lucar were enjoying their time as any other couples. Suddenly, LSH, ...
- (全国多校重现赛一)B-Ch's gifts
Mr. Cui is working off-campus and he misses his girl friend very much. After a whole night tossing a ...
- (全国多校重现赛一)A-Big Binary Tree
You are given a complete binary tree with n nodes. The root node is numbered 1, and node x's father ...
- 2016ACM/ICPC亚洲区沈阳站-重现赛赛题
今天做的沈阳站重现赛,自己还是太水,只做出两道签到题,另外两道看懂题意了,但是也没能做出来. 1. Thickest Burger Time Limit: 2000/1000 MS (Java/Oth ...
- 2016 CCPC 东北地区重现赛
1. 2016 CCPC 东北地区重现赛 2.总结:弱渣,只做出01.03.05水题 08 HDU5929 Basic Data Structure 模拟,双端队列 1.题意:模拟一个栈的操 ...
- 2016 CCPC长春重现赛
1.2016中国大学生程序设计竞赛(长春)-重现赛 2.总结:会做的太少,应变能力也不行,或者说猜题目的能力不行 02 水 04 HDU 5914 Triangle 1.题意:1~n,n个数,问 ...
随机推荐
- CentOS安装图解(在VMware 8上安装)
近期准备学习一下CentOS,打算先在VMware上装一个用于初步了解. 整体步骤如下: 一.获取CentOS安装镜像.可以从以下几个地方获取,顺便提一句,我是从163下载的. 1.CentOS的官方 ...
- 关于MXNet
关于人工智能,机器学习,深度学习 三者关系:从宏观到微观. 机器学习是人工智能的一部分,深度学习是机器学习的一部分. 基础:大数据. 关于深度学习 深度学习基于神经网络, 关于神经网络:通过叠加网络层 ...
- java中hashmap容量的初始化
HashMap使用HashMap(int initialCapacity)对集合进行初始化. 在默认的情况下,HashMap的容量是16.但是如果用户通过构造函数指定了一个数字作为容量,那么Hash会 ...
- Ubuntu网络network eth0配置 | ubuntu network configuration
本文首发于个人博客https://kezunlin.me/post/5076bc45/,欢迎阅读! ubuntu network configuration Guide network proxy S ...
- 20191017-6alpha week 2/2 Scrum立会报告+燃尽图 05
此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9802 一.小组情况 队名:扛把子 组长:迟俊文 组员:宋晓丽 梁梦瑶 韩昊 ...
- 2019-9-9:渗透测试,docker下载dvwa,使用报错型sql注入dvwa
docker下载dvwa镜像,报错型注入dvwa,low级 一,安装并配置docker 1,更新源,apt-get update && apt-get upgrade &&am ...
- Photoshop CS2软件下载与安装教程
Photoshop CS2精简版下载地址: 链接:https://pan.baidu.com/s/1ryJPLuKG_MixWjGJgLebOg提取码:nzz9 软件介绍: Photoshop主要处理 ...
- JavaScript笔记九
1.数组方法 reverse() - 可以用来反转一个数组,它会对原数组产生影响 concat() - 可以连接两个或多个数组,它不会影响原数组,而是新数组作为返回值返回 join() - 可以将一个 ...
- tensorflow的函数
1. if __name__=="__main__": tf.app.run()#运行之前定义的main函数#将传进来的参数,以及flags.FLAGS定义的参数传入到main函数 ...
- FastDFS搭建分布式文件系统
FastDFS搭建分布式文件系统 1. 什么是分布式文件系统 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网 ...