AcWing 3258. 碰撞的小球java
原题链接
简单
作者:
huaqingren
,
2021-03-07 15:10:42
,
所有人可见
,
阅读 402
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int L=scan.nextInt();
int t=scan.nextInt();
Node[] nodes=new Node[n];
for(int i=0;i<n;i++)
{
int x=scan.nextInt();
nodes[i]=new Node(i,x,1);
}
for(int i=1;i<=t;i++)
{
int[] b=new int[L+1];//记录下每个位置是否碰撞了
//第一步 所有小球走一步
for(int j=0;j<n;j++)
{
if(nodes[j].p==L||nodes[j].p==0)
{
nodes[j].f=-nodes[j].f;
}
nodes[j].p+=nodes[j].f;
b[nodes[j].p]++;
}
//第二步 处理碰撞的小球
for(int j=0;j<n;j++)
{
if(b[nodes[j].p]>1)
{
nodes[j].f=-nodes[j].f;
}
}
}
//输出
for(int i=0;i<n;i++)
System.out.print(nodes[i].p+" ");
scan.close();
}
private static class Node
{
private int a;//第几个输入的数据
private int p;//位置
private int f;//1 向右走 -1向左走
public Node(int a,int p,int f)
{
this.a=a;
this.p=p;
this.f=f;
}
}
}