Posted on 2010-11-02 19:38
lzh525 阅读(530)
评论(0) 编辑 收藏 引用
!!!!比赛中被卡的题,超郁闷,一个细微没注意到的地方导致与奖项擦肩而过,遗憾啊....
教训总结:(1)变量命名时尽量见词知意,不要去随便搞个字母去所谓的节约时间,这样可以避免变量搞混检查错误困难。
(2)平时要注意细节问题,遇到某些问题时还是要相信自己。
(3)团队合作,时间观念,全局观念很重要....
1 #include<iostream>
2 #include<math.h>
3 using namespace std;
4 double r,l,w,x,y,s,v,a;
5 int flag;
6 #define PI acos(-1)
7 #define M 1000000000
8
9 double usedtime(double &a,double &b)//计算每相邻两次碰撞所耗时间
10 {
11 double tx,ty;//水平方向分速度,竖直方向分速度
12 if(a>0) //水平分速度向上
13 tx=(l-x)/a;
14 else if(a<0)
15 tx=(r-x)/a;
16 else //水平方向速度为0;
17 tx=M;
18 if(b>0)
19 ty=(l-y)/b;//比赛时将此处的l写成了1,比赛最后几分钟没能发现,回来后将这错误一改,测试数据便都过了。那时就无语了,本来至少可拿个三等奖的啊..经验不足
20 else if(b<0)
21 ty=(r-y)/b;
22 else
23 ty=M;
24 if(tx>ty)
25 {
26 if(ty>=s)//
27 {
28 flag=1;
29 y=y+b*s;
30 x=x+a*s;
31 }
32 else
33 {
34 if(a>0)
35 y=w;
36 else
37 y=r;
38 x=x+a*ty;
39 a=-a;
40 }
41 return ty;
42 }
43 else
44 {
45 if(tx>=s)
46 {
47 flag=1;
48 y=y+b*s;
49 x=x+a*s;
50 }
51 else
52 {
53 if(b>0)
54 x=l;
55 else
56 x=r;
57 y=y+b*tx;
58 b=-b;
59 }
60 return tx;
61 }
62
63 }
64 int main()
65 {
66 double ax,ay,t;
67 while(1)
68 {
69 cin>>l>>w>>x>>y>>r>>a>>v>>s;
70 l=l-r;
71 w=w-r;
72 if(!r&&!l&&!w&&!x&&!y&&!s&&!a&&!v)
73 break;
74 a=a/180*PI;
75 ax=v*cos(a);
76 ay=v*sin(a);
77 flag=0;
78 while(1)
79 {
80 t=usedtime(ax,ay);
81 if(flag==1)
82 break;
83 else
84 s=s-t;
85 }
86 printf("%.2lf %.2lf\\n",x,y);
87 }
88 return 0;
89 }