按时间0.5s增加判断位置
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n;
while (cin >> n) { // 注意 while 处理多个 case
double list[n][2], t, pos;
int k, all = 0;
for (int i = 0; i < n; i++) {
cin >> list[i][0] >> list[i][1];
if (list[i][1] == 0) {
k = i;
pos = list[i][0];
}
}
for (int i = 0; i < n; i++) {
if ((list[i][0] - pos)*list[i][1] < 0) {
all += list[i][1];
}
}
if (all == 0) {
cout << "Cannot fall!" << endl;
} else {
for (t = 0; (!( list[k][0] == 100 || list[k][0] == 0)); t += 0.5) {
int count = 0;
for (int j = 0; j < n; j++) {
list[j][0] += list[j][1] * 0.5 ;
if (pos == list[j][0])
count++;
}
for (int i = 0; i < n; i++) {
if (count == 3 && list[i][0] == pos)
list[i][1] *= -1;
else
for (int j = i + 1; j < n; j++) {
if (list[j][0] == list[i][0]) {
int p = list[i][1];
list[i][1] = list[j][1];
list[j][1] = p;
}
}
}
}
cout << t << endl;
}
}
}
// 64 位输出请用 printf("%lld")