AcWing 3474. 坠落的蚂蚁
-
两只本就在动的蚂蚁碰头后交换速度,相当于它们穿过了对方,没有任何变化 因此,在A左边向左和在A右边向右的蚂蚁相当于不会产生任何影响,忽略 A每与其他蚂蚁碰头一次,A就会改变一次方向;如果A左边和右边蚂蚁数量相同,左右影响抵消,A最终会静止;如果数量不相同,A的方向与蚂蚁更多的方向相同,且A从开始到掉落所花的时间与较少边蚂蚁被全部抵消后A碰到较多边的第一只蚂蚁无阻碍走完全部的路程的时间相同(因为速度相等) 如果左边大于右边,时间就是 100减去;如果右边大于左边,时间就是坐标
#include <iostream>
#include <vector>
#include <algorithm>
#define endl
#define _(a) cout << #a << ": " << (a) << " "
using namespace std;
typedef pair<int, int> PII;
int main() {
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
vector<int> l, r;
vector<PII> ve;
int n, A;
cin >> n;
for (int i = 0, p, op; i < n; ++ i) {
cin >> p >> op;
if (op == 0) A = p;
ve.push_back({
p, op});
}
for (auto x : ve) {
if (x.second == 1 && x.first <= A) l.push_back(x.first);
else if (x.second == -1 && x.first >= A) r.push_back(x.first);
}
if (l.size() == r.size()) cout << "Cannot fall!";
else if (l.size() > r.size()) {
sort(l.begin(), l.end());
cout << 100 - l[l.size() - r.size() - 1];
} else {
sort(r.begin(), r.end());
cout << r[l.size()];
}
}
下一篇:
数据结构C语言实现队列
