题目链接
AtCoder:
洛谷:
Solution
首先可以注意到他们的相对位置是不变的。
然后两只蚂蚁相遇可以看作是他们穿过了彼此然后交换编号。
那么我们就可以得到最后的位置了,只需要确定编号就好了。
注意到如果有一只蚂蚁穿过了\(l-1\sim 0\)之间,所有编号都会左移(右移)一格。
那么我们只需要处理出他们编号是怎么移的就好了。
#includeusing namespace std;#define int long long void read(int &x) { x=0;int f=1;char ch=getchar(); for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f; for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;}void print(int x) { if(x<0) putchar('-'),x=-x; if(!x) return ;print(x/10),putchar(x%10+48);}void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}#define lf double#define ll long long const int maxn = 1e5+10;const int inf = 1e9;const lf eps = 1e-8;int p[maxn],n,c,l,t;signed main() { read(n),read(l),read(t); for(int i=1,x;i<=n;i++) { read(p[i]),read(x);x=x==2?-1:x;p[i]+=x*t; if(p[i]>0) c+=p[i]/l; else if(p[i]<0) c+=(p[i]+1)/l-1;p[i]=(p[i]%l+l)%l; }sort(p+1,p+n+1); c=(c%n+n)%n; for(int i=c+1;i<=n;i++) write(p[i]); for(int i=1;i<=c;i++) write(p[i]); return 0;}