码迷,mamicode.com
首页 > 其他好文 > 详细

CSP-201803-2 碰撞的小球

时间:2018-07-26 21:16:16      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:ems   没有   amp   cout   时间   csp   ati   for循环   cin   

这道题我在csp考试时候,当时没有做出来,当时没用debug,不知道怎么错的。

今天重新做一次,发现memset我用错了。

memset只能置0或者-1,其他的要用for循环进行。

题目思路:

这个题还是挺简单的。既然球一开始不会重合,只要判断某个位置上有两个球的时候,就改变这两个球的方向。

如果在边缘,也要改变方向,这样使得球可以正常移动。

用一个循环表示时间的流逝,遍历每一个球。

 1 #include <iostream>
 2 #include <string.h>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int n, L, t;//小球的个数、线段长度和t秒
 9     cin>>n>>L>>t;
10     int location[n+1];
11     int direction[n+1];
12     int LL[L];
13 
14     memset(LL,0,L*sizeof(int));
15 
16     for(int i=0; i<n; i++)
17         direction[i]=1;
18 
19     for(int i=0; i<n; i++)
20     {
21         cin>>location[i];
22         LL[location[i]]++;
23     }
24     //memset(direction,1,sizeof(int));
25 
26     for(int j=0; j<t; j++)
27     {//每一个时间
28         for(int i=0; i<n; i++)
29         {//对于每一个球
30             //先判断边缘问题
31             LL[location[i]]--;
32             location[i] += direction[i];
33             LL[location[i]]++;
34         }
35         for(int i=0; i<n; i++)
36         {//对于每一个球
37             //判断边缘
38             if(location[i] == L && direction[i] == 1)
39                 direction[i]=-1;
40             if(location[i] == 0 && direction[i] == -1)
41                 direction[i]=1;
42 
43             if(LL[location[i]] == 2)
44                 direction[i]*=int(-1);
45         }
46     }
47 
48     //output
49     for(int i=0; i<n; i++)
50     {
51         cout<<location[i];
52         if(i!=n-1)
53             cout<< ;
54     }
55     cout<<endl;
56 }

 

CSP-201803-2 碰撞的小球

标签:ems   没有   amp   cout   时间   csp   ati   for循环   cin   

原文地址:https://www.cnblogs.com/amtop/p/9373965.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!