1. 程式人生 > >CCF 2018 練習題 2 碰撞的小球

CCF 2018 練習題 2 碰撞的小球

#include <iostream>
#include <algorithm>
using namespace std;
class ball{
	public:
		int pos;
		char v;
		int index;
		ball(){
			v=1;
		}
};
bool cmpPos(ball &a,ball &b){
	return a.pos<b.pos;
}
bool cmpIndex(ball &a,ball &b){
	return a.index<b.index;
}
int n=0,l=0,t=0;
int main(){
	cin>>n>>l>>t;
	
	ball* ballp = new ball[n];
	for(int i=0;i<n;i++){
		cin>>ballp[i].pos;
		ballp[i].index=i;
	}
	sort(ballp,ballp+n,cmpPos);
	
	for(int i=0;i<t;i++){
		for(int j=0;j<n;j++){
			ballp[j].pos+=ballp[j].v;
		}
		if(ballp[0].pos==0){
			ballp[0].v-=2*ballp[0].v;
		}
		if(ballp[n-1].pos==(l)){
			ballp[n-1].v-=2*ballp[n-1].v;
		}
		for(int j=1;j<n;j++){
			if(ballp[j].pos==ballp[j-1].pos){
				ballp[j].v-=2*ballp[j].v;
				ballp[j-1].v-=2*ballp[j-1].v;
			}
		}
	}
	sort(ballp,ballp+n,cmpIndex);
	for(int j=0;j<n-1;j++){
		cout<<ballp[j].pos<<" ";
	}
	cout<<ballp[n-1].pos;
	cout<<endl;
	delete [] ballp;
	return 0;
	
}