1,蚂蚁最终的位置顺序和起始的顺序相同
2,最终的位置的的坐标方向和起始的顺序一一对应
3,如果最终位置的一个点有两个则表示正在转向
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<string>
#include<cstring>
#include<bitset>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<unordered_set>
#include<map>
#include<unordered_map>
#include<iomanip>
#include<algorithm>
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define endl "\n"
#define int long long
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 1e5+10;
struct node{
int a,b,i;
};
bool cmp(node a,node b){
return a.a<b.a;
}
bool cmp2(node a,node b){
return a.i < b.i;
}
node a[maxn],b[maxn],tx[maxn];
void solve(){
int n,t,k;
cin >> n >> t;
map<int,int> mp;
for( int i = 0 ; i < n ; ++i){
cin >> a[i].a >> a[i].b;
b[i].a = a[i].a+a[i].b*t;
a[i].i = i;
b[i].b = a[i].b;
b[i].i = i;
mp[b[i].a]++;
}
sort(a,a+n,cmp);
sort(b,b+n,cmp);
for( int i = 0 ; i < n ; ++i ){
a[i].a = b[i].a;
a[i].b = b[i].b;
}
sort(a,a+n,cmp2);
for( int i = 0 ; i < n ; ++i ){
cout << a[i].a << ' ';
if(mp[a[i].a] > 1) cout << 0 << endl;
else cout << a[i].b << endl;
}
}
main(){
IOS;
solve();
}