lzh

刘政
posts - 17, comments - 1, trackbacks - 0, articles - 1

2010湖南省赛D题(台球碰撞)

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 }

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理