CCF CSP 201803-2 碰撞的小球
原题目:题目可点击此链接
n,l,t=map(int,input().split())
ball=list(map(int,input().split()))
ls=[]
for i in range(n):
ls.append(1) #设置运动方向列表,1为向右,-1为向左,初始运动状态为1
for i in range(t):
for j in range(n):
if (ls[j]==1and ball[j]<l and ball.count(ball[j])==1)or ball[j]==0 or(ls[j]==-1 and ball.count(ball[j])>1):
#判断运动方向向右的三个条件:
#1,运动方向列表为1且当前位置不在终点
#2,当前位置为起点
#3,运动方向列表为-1且该位置上有两个小球(碰撞后往相反的方向)
ls[j]=1
ball[j]+=1
if ball.count(ball[j])>1:
ls[j]=-1 #如运动后发生碰撞,修改方向
elif (ls[j]==-1and ball[j]>0 and ball.count(ball[j])==1)or ball[j]==l or (ls[j]==1 and ball.count(ball[j])>1):
ls[j]=-1
ball[j]-=1
if ball.count(ball[j])>1:
ls[j]=1
for i in range(n):
print(ball,end="")