Collision(hdu5114)
Collision
Time Limit: 15000/15000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)
Total Submission(s): 846 Accepted Submission(s): 200
The playground is a rectangle with walls around. Two balls are put in different positions inside the rectangle. The balls are so tiny that their volume can be ignored. Initially, two balls will move with velocity (1, 1). When a ball collides with any side of the rectangle, it will rebound without loss of energy. The rebound follows the law of refiection (i.e. the angle at which the ball is incident on the wall equals the angle at which it is reflected).
After they choose the initial position, Matt wants you to tell him where will the two balls collide for the first time.
For each test case, the first line contains two integers x and y. The four vertices of the rectangle are (0, 0), (x, 0), (0, y) and (x, y). (1 ≤ x, y ≤ 105)
The next line contains four integers x1, y1, x2, y2. The initial position of the two balls is (x1, y1) and (x2, y2). (0 ≤ x1, x2 ≤ x; 0 ≤ y1, y2 ≤ y)
In the second line, output “Collision will not happen.” (without quotes) if the collision will never happen. Otherwise, output two real numbers xc and yc, rounded to one decimal place, which indicate the position where the two balls will first collide.
1 0 1 10
6.0 6.0
Collision will not happen.
6.0 5.0
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<stdlib.h>
5 #include<string.h>
6 #include<math.h>
7 #include<queue>
8 using namespace std;
9 typedef long long LL;
10 pair<LL,LL>exgcd(LL n,LL m);
11 LL solve(LL x, LL y,LL n,LL m);
12 LL gcd(LL n,LL m);
13 int main(void)
14 {
15 LL n,m,k;
16 int N;
17 int __ca = 0;
18 scanf("%d",&N);
19 while(N--)
20 {
21 scanf("%lld %lld",&n,&m);
22 LL x1,y1,x2,y2;
23 n*=2;
24 m*=2;
25 scanf("%lld %lld %lld %lld",&x1,&y1,&x2,&y2);
26 x1*=2;
27 y1*=2,x2*=2;
28 y2*=2;
29 printf("Case #%d:\n",++__ca);
30 if(x1==x2&&y1==y2)
31 {
32 printf("%.1f %.1f\n",x1/2,y1/2);
33 }
34 else if(x1==x2)
35 {
36 LL ty = (2*m-(y1+y2))/2;
37 LL yy = min(y1,y2)+ty;
38 LL xx = min(x1,x2)+ ty;
39 if((xx/n)%2==0)
40 {
41 xx = xx%n;
42 }
43 else
44 {
45 xx = ((n-xx)%n+n)%n;
46 if(xx == 0)xx = n;
47 }
48 if((yy/m)%2==0)
49 {
50 yy = yy%m;
51 }
52 else
53 {
54 yy = ((m-yy)%m+m)%m; if(yy == 0)yy = m;
55 }
56 printf("%.1lf %.1lf\n",xx/2.0,yy/2.0);
57 }
58 else if(y1 == y2)
59 {
60 LL tx = (2*n-(x1+x2))/2;
61 LL yy = min(y1,y2)+tx;
62 LL xx = min(x1,x2)+tx;
63 if((yy/m)%2==0)
64 {
65 yy = yy%m;
66 }
67 else
68 {
69 yy = ((m-yy)%m+m)%m;
70 if(yy == 0)yy = m;
71 }
72 if((xx/n)%2==0)
73 {
74 xx = xx%n;
75 }
76 else
77 {
78 xx = ((n-xx)%n+n)%n;
79 if(xx == 0)xx = n;
80 }
81 printf("%.1lf %.1lf\n",xx/2.0,yy/2.0);
82 }
83 else
84 {
85 LL ty = (2*m-(y1+y2))/2;
86 LL tx = (2*n-(x1+x2))/2;
87 LL ask = solve(tx,ty,n,m);
88 if(ask==1e18)
89 printf("Collision will not happen.\n");
90 else
91 {
92 LL yy = y1+ask;
93 if((yy/m)%2==0)
94 {
95 yy = yy%m;
96 //if(yy == 0)yy = m;
97 }
98 else
99 {
100 yy = ((m-yy)%m+m)%m;
101 if(yy == 0)yy = m;
102 }
103 LL xx = x1+ask;
104 if((xx/n)%2==0)
105 {
106 xx = xx%n;
107 }
108 else
109 {
110 xx = ((n-xx)%n+n)%n;
111 if(xx == 0)xx = n;
112 }
113 printf("%.1lf %.1lf\n",xx/2.0,yy/2.0);
114 }
115 }
116
117 }
118 return 0;
119 }
120 pair<LL,LL>exgcd(LL n,LL m)
121 {
122 if(m==0)
123 return make_pair(1,0);
124 else
125 {
126 pair<LL,LL>ak = exgcd(m,n%m);
127 return make_pair(ak.second,ak.first-(n/m)*ak.second);
128 }
129 }
130 LL solve(LL x, LL y,LL n,LL m)
131 {
132 LL cc = n;
133 LL c = x-y;
134 LL gc = gcd(n,m);
135 if(c%gc)return 1e18;
136 else
137 {
138 c/=gc;
139 n/=gc;
140 m/=gc;
141 pair<LL,LL>ak = exgcd(n,m);
142 LL x0 = (ak.first*c%m+m)%m;
143 LL lcm = (LL)m*cc;
144 x = x-cc*x0;
145 x = x%lcm+lcm;
146 x%=lcm;
147 return x;
148 }
149 }
150 LL gcd(LL n,LL m)
151 {
152 if(m==0)return n;
153 else return gcd(m,n%m);
154 }
Collision(hdu5114)的更多相关文章
- 1. md5 collision(50)
md5 collision(50) ------南京邮电大学ctf: http://chinalover.sinaapp.com/web19/ 发现了一串代码 <?php $md51 ...
- Core源码(二) Linq的Distinct扩展
先贴源码地址 https://github.com/dotnet/corefx/tree/master/src/System.Linq/src .NET CORE很大一个好处就是代码的开源,你可以详细 ...
- 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...
- CCNA网络工程师学习进程(2)基本的网络设备
在组网技术中用到的设备有中继器(Repeater).集线器(Hub).网桥(Bridge).交换机(Switch).路由器(Router).分别工作在OSI参考模型中的物理层.数据链路层和网络层. ...
- 为什么带网格(mesh)的模型添加了刚体Rigidbody和MeshCollider,还是会从地板穿过去?
两个Gameobject 放置在空中, 一个是Cube,一个是茄子模型 Cube的Collider 是Box Collider , 茄汁的Collider 是mesh collider, 他们都添加了 ...
- 【Unity3D基础教程】给初学者看的Unity教程(一):GameObject,Compoent,Time,Input,Physics
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点推荐.谢谢! Unity3D重要模块的类图 最近刚刚完成了一 ...
- [转载] 散列表(Hash Table)从理论到实用(上)
转载自:白话算法(6) 散列表(Hash Table)从理论到实用(上) 处理实际问题的一般数学方法是,首先提炼出问题的本质元素,然后把它看作一个比现实无限宽广的可能性系统,这个系统中的实质关系可以通 ...
- [转载] 散列表(Hash Table) 从理论到实用(下)
转载自: 白话算法(6) 散列表(Hash Table) 从理论到实用(下) [澈丹,我想要个钻戒.][小北,等等吧,等我再修行两年,你把我烧了,舍利子比钻戒值钱.] ——自扯自蛋 无论开发一个程序还 ...
- PHP学习笔记:对命名空间(namespace)学习资料的翻译
Name collisions means: you create a function named db_connect, and somebody elses code that you use ...
随机推荐
- Linux三剑客之老三grep
说明: Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.工作中我们常常用它来过滤出我们想要的数据. 格式: grep [OPTIONS] 基本参 ...
- MapReduce07 Join多种应用
目录 1 Join多种应用 1.1 Reduce Join 1.2 Reduce Join实例实操 需求 需求分析 Map数据处理 Reduce端合并(数据倾斜) 代码实现 JoinBean类 Joi ...
- flink04 -----1 kafkaSource 2. kafkaSource的偏移量的存储位置 3 将kafka中的数据写入redis中去 4 将kafka中的数据写入mysql中去
1. kafkaSource 见官方文档 2. kafkaSource的偏移量的存储位置 默认存在kafka的特殊topic中,但也可以设置参数让其不存在kafka的特殊topic中 3 将k ...
- RAC中常见的高级用法-组合
组合: concat组合: 按一定顺序执行皇上与皇太子关系 concat底层实现: 1.当拼接信号被订阅,就会调用拼接信号的didSubscribe 2.didSu ...
- RAC(Reactive Cocoa)常见的类
导入ReactiveCocoa框架 在终端,进入Reactive Cocoa文件下 创建podfile 打开该文件 并配置 use_frameworks! pod 'ReactiveCocoa', ' ...
- When do we use Initializer List in C++?
Initializer List is used to initialize data members of a class. The list of members to be initialize ...
- Spring Cloud使用
一.创建提供者工程01-provider-8081 (1) 创建工程 创建一个Spring Initializr工程,并命名为01-provider-8081.导入Lombok.Web.JPA及MyS ...
- 【Spring Framework】Spring 入门教程(一)控制反转和依赖注入
参考资料 Spring 教程 说在前面 什么样的架构,我们认为是一个优秀的架构? 判断准则:可维护性好,可扩展性好,性能. 什么叫可扩展性好? 答:在不断添加新的代码的同时,可以不修改原有代码,即符合 ...
- 【Linux】【Service】【OpenSSL】原理及实现
1. 概念 1.1. SSL(Secure Sockets Layer安全层套接字)/TLS(Transport Layer Security传输层套接字). 最常见的应用是在网站安全方面,用于htt ...
- 2、Redis的安装
一.Windows下Redis安装 下载地址 Redis中文网站 Github地址 1.将下载下来的文件解压到目录 2.双击redis-server.exe运行 出现如下界面证明运行成功 3.双击 ...