1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 574 Solved: 226
[Submit][Status]
Description
Farmer John新买的干草打包机的内部结构大概算世界上最混乱的了,它不象普通的机器一样有明确的内部传动装置,而是,N (2 <= N <= 1050)个齿轮互相作用,每个齿轮都可能驱动着多个齿轮。 FJ记录了对于每个齿轮i,记录了它的3个参数:X_i,Y_i表示齿轮中心的位置坐标(-5000 <= X_i <= 5000; -5000 <= Y_i <= 5000);R_i表示该齿轮的半径(3 <= R_i <= 800)。驱动齿轮的位置为0,0,并且FJ也知道最终的工作齿轮位于X_t,Y_t。 驱动齿轮顺时针转动,转速为10,000转/小时。你的任务是,确定传动序列中所有齿轮的转速。传动序列的定义为,能量由驱动齿轮传送到工作齿轮的过程中用到的所有齿轮的集合。对能量传送无意义的齿轮都应当被忽略。在一个半径为Rd,转速为S转/每小时的齿轮的带动下,与它相接的半径为Rx的齿轮的转速将为-S*Rd/Rx转/小时。S前的负号的意思是,一个齿轮带动的另一个齿轮的转向会与它的转向相反。 FJ只对整个传动序列中所有齿轮速度的绝对值之和感兴趣,你的任务也就相应转化成求这个值。机器中除了驱动齿轮以外的所有齿轮都被另外某个齿轮带动,并且不会出现2个不同的齿轮带动同一个齿轮的情况。 相信你能轻易地写个程序来完成这些计算:)
Input
* 第1行: 3个用空格隔开的整数:N,X_t,Y_t
* 第2..N+1行: 第i+1描述了齿轮i的位置及半径:X_i,Y_i,以及R_i
Output
* 第1行: 输出所有在传动中起到作用的齿轮转速的绝对值,包括驱动齿轮和 工作齿轮。只需要输出答案的整数部分
Sample Input
0 0 10
0 30 20
32 54 20
-40 30 20
机器里一共有4个齿轮,位于0,0的是半径为10的驱动齿轮,它带动了位于
0,30的,半径为20的某个齿轮。这个齿轮又间接带动了位于32,54,半径为20的
工作齿轮,以及一个位于-40,30,半径同样为20的冗余的齿轮。
Sample Output
HINT
输出说明:
齿轮 位置 半径 转速
1 (0,0) 10 10,000
2 (0,30) 20 -5,000
3 (32,54) 20 5,000
------
齿轮转速绝对值之和:20,000
Source
题解:这个嘛,其实就是通过各个齿轮的位置和齿轮的半径建立一个联系,然后从驱动轮一直搜索到工作轮(在这里BFS,DFS均可),由于题目中声明了不会存在两个不同的齿轮带动同一个齿轮的情况,所以麻烦少了很多,且路径唯一。还有值得注意的是,最好在计算各个轮过程中要用实型变量来存储,防止由于整除而导致的精度误差。。。
type
point=^node;
node=record
g:longint;
w:extended;
next:point;
end; var
i,j,k,l,m,n,f,r,q,x1,y1:longint;
a:array[..,..] of longint;
b:array[..] of point;
c:array[..] of extended;
d,e:array[..] of longint;
p:point;
ans:extended;
function cut(x,y:longint):boolean;
begin
exit((sqr(a[x,]-a[y,])+sqr(a[x,]-a[y,]))=sqr(a[x,]+a[y,]))
end;
procedure add(x,y:longint);
var
p:point;
begin
new(p);
p^.g:=y;
p^.w:=a[y,]/a[x,];
p^.next:=b[x];
b[x]:=p;
end;
begin
readln(n,x1,y1);
for i:= to n do
readln(a[i,],a[i,],a[i,]);
for i:= to n do
for j:= to i- do
begin
if cut(i,j) then
begin
add(i,j);
add(j,i);
end;
end;
for i:= to n do
if (a[i,]=) and (a[i,]=) then
begin
l:=i;
break;
end;
for i:= to n do
if (a[i,]=x1) and (a[i,]=y1) then
begin
q:=i;
break;
end;
c[l]:=;
fillchar(e,sizeof(e),);
d[]:=l;e[l]:=-;
f:=;r:=;
while f<r do
begin
p:=b[d[f]];
while p<>nil do
begin
if e[p^.g]= then
begin
d[r]:=p^.g;
e[p^.g]:=d[f];
c[p^.g]:=c[d[f]]*p^.w;
inc(r);
end;
p:=p^.next;
end;
inc(f);
end;
ans:=;
while q<>- do
begin
ans:=ans+(/c[q]);
q:=e[q];
end;
writeln(trunc(ans));
end.
1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机的更多相关文章
- BZOJ 1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
题目 1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机 Time Limit: 5 Sec Memory Limit: 64 MB Desc ...
- 【BZOJ】1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机(模拟+bfs)
http://www.lydsy.com/JudgeOnline/problem.php?id=1615 这种题..... #include <cstdio> #include <c ...
- bzoj 1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机【bfs】
直接bfs即可,注意开double,还有驱动和终点的齿轮都在序列里,要把它们找出来= = #include<iostream> #include<cstdio> #includ ...
- bzoj1615 [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
Description Farmer John新买的干草打包机的内部结构大概算世界上最混乱的了,它不象普通的机器一样有明确的内部传动装置,而是,N (2 <= N <= 1050)个齿轮互 ...
- bzoj1615 / P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler
P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler 细节题.$O(n^{2})$的$bfs$可过. #include<iostream> ...
- 洛谷P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler
P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler 题目描述 Farmer John has purchased the world's most l ...
- P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler
传送门 题目问的是从出发点一直跑到终点的一条链上所有齿轮的速度和 其他的不用考虑 直接搜就好了 注意求的是绝对值之和,不是和的绝对值,所以不用考虑方向问题 注意 N<=1050 数组不要只开10 ...
- BZOJ_1615_[Usaco2008_Mar]_The Loathesome_Hay Baler_麻烦的干草打包机_(模拟+宽搜/深搜)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1615 一个主动轮带着一些轮子转,轮子带着轮子转,轮子带着轮子转...一个非主动轮只会被一个轮子 ...
- bzoj1615 麻烦的干草打包机 BFS
Description Farmer John新买的干草打包机的内部结构大概算世界上最混乱的了,它不象普通的机器一样有明确的内部传动装置,而是,N (2 <= N <= 1050)个齿轮互 ...
随机推荐
- Maven与Antx(整理)
http://blog.csdn.net/ghost_t/article/details/5709640 一.Maven与Antx概况: Antx简介 在讲为什么使用maven之前我想说一下,an ...
- WPF ResourceDictionary的使用
作用:一个应用程序中,某个窗口需要使用样式,但是样式非常多,写在一个窗口中代码分类不方便.最好Style写在专门的xaml文件中,然后引用到窗口中,就像HTML引用外部css文件一样. 初衷:就在于可 ...
- Oracle to_char格式化函数 显示毫秒
racle如何显示毫秒 date类型只能精确到秒,要想精确到毫秒,需要使用timestamp类型. 应用举例: 举例1: select to_char(systimestamp,'yy ...
- IOS苹果手机上 iframe 滚动失效条问题,局部滚动开启弹性滚动!
html:bo<div class="scroll-wrapper"> <iframe src=""></iframe> & ...
- AtomicInteger相关类
引用地址:http://blog.csdn.net/xh16319/article/details/17056767 在java6以后我们不但接触到了Lock相关的锁,也接触到了很多更加乐观的原子修改 ...
- 从Chrome源码看浏览器的事件机制
.aligncenter { clear: both; display: block; margin-left: auto; margin-right: auto } .crayon-line spa ...
- [Echarts]用Echarts绘制饼状图
在项目网站的网页中,有这样一幅图: 心血来潮,想使用百度Echarts来绘制一下,可是没能绘制得完全一样,Echarts饼状图的label不能在图形下面放成一行,最后的效果是这样子的: 鼠标移动到it ...
- 关于data-xxx属性大小写不敏感,不识别大写的几点总结
1.所有标签属性,没有大小写区分,都是小写,如:data-userID,在输出后会变成data-userid,前者只能获取到'undefined'. 2.dataset 自动把 - 转换为驼峰.类似的 ...
- iOS中的三大定时器
iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD. NSTimer 方式1 // 创建定时器 NSTimer *timer = [NST ...
- DOM解析,取得XML文件里面的信息
1 创建解析器工厂 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 2 解析器工厂对象创建解析器对象 Do ...