CCF-CSP201803-2碰撞的小球,不用STL的简单满分代码~

废话不多说,上代码:

// An highlighted block
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
	int n, l, t;
	cin >> n >> l >> t;
	int a[100];
	int b[100];
	for (int i = 0; i < n; i++) { cin >> a[i]; b[i] = 1; }
	int c[100];
	int pos=0;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (a[i] > a[j]) pos++;
		}
		
		c[i] = pos;
		pos = 0;
	}
	sort(a, a + n);
	while (t > 0) {
		for (int i = 0; i < n; i++) {
			if (a[i] == a[i + 1]) {
				int c = b[i];
				int d = b[i + 1];
				b[i] = d;
				b[i + 1] = c;
			}
			if (a[i] < l && b[i] == 1&&a[i]>=0) a[i]++;
			else if(a[i]>0&&b[i]==0)a[i]--;
			else if (a[i] == l && b[i] == 1) { b[i] = 0; a[i]--; }
			else if (a[i] == 0 && b[i] == 0) { b[i] = 1; a[i]++; }

		}
		t--;
}
	for (int i = 0; i < n; i++)
	cout << a[c[i]] << " ";
	return 0;
}

评测结果:
在这里插入图片描述
大致思路:
易得,排序过的原始数据中,只有相邻的两个小球才会发生碰撞,也就是说,初始位置更小的球无论经过多久,它的位置数据依旧是最小的,于是处理碰撞小球时,仅考虑相邻小球的状态变化就可以了!除此之外就是既不发生碰撞也不碰到边界的情况 和碰到左右边界的情况的处理。只要捋清思路,这个题就很简单啦!
祝各位旗开得胜hhhhh!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值