CCF 201803-2 碰撞的小球 (python 100分)

201803-2 碰撞的小球
题目: 见官网
菜鸟一枚,思路较简单

#碰撞的小球
n,l,t=map(int,input().split())
s=list(map(int,input().split()))
def get_index(s):#返回碰撞小球的索引
    q=[]
    p=[]
    for j in range(len(s)):
        if s.count(s[j])>1:
            q.append(s[j])
    q=set(q)
    for i in q:
        a=s.index(i)
        s[a]=0
        b=s.index(i)
        p.append([a,b])
    return p

p=[]
for i in range(len(s)):
    p.append([1,s[i]])#1表示小球王数轴正方向移动,-1表示小球往数轴负方向移动
for i in range(t):
    ss=set(s)
    if len(ss)==len(s):
        for j in range(len(p)):
            if p[j][1] == l or p[j][1] == 0:
                p[j][0] = -p[j][0]
            if p[j][0]==1:
                p[j][1] = p[j][1] + 1
                s[j] = p[j][1]
            else:
                p[j][1] = p[j][1] - 1
                s[j] = p[j][1]
    else:
        t=get_index(s)
        for k in range(len(t)):
            p[t[k][0]][0] = -p[t[k][0]][0]
            p[t[k][1]][0] = -p[t[k][1]][0]
        for j in range(len(p)):
            if p[j][1] == l or p[j][1] == 0:
                p[j][0] = -p[j][0]
            if p[j][0] == 1:
                p[j][1] = p[j][1] + 1
                s[j] = p[j][1]
            else:
                p[j][1] = p[j][1] - 1
                s[j] = p[j][1]
for i in s:
    print(i,end=" ")


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值