zoukankan      html  css  js  c++  java
  • [AGC013C] Ants on a Circle 思维题

    https://atcoder.jp/contests/agc013/tasks/agc013_c?lang=en

    考虑到原来每只蚂蚁都在相邻之间撞来撞去,所以肯定最后每只蚂蚁的相对顺序是不会改变的。显然可以直接确定最后位置的整个序列,只要确定第一只蚂蚁在序列的位置(最终编号),就可以知道每只蚂蚁最后实际的位置。

    不妨想象成蚂蚁相撞,蚂蚁相互穿过,编号交换。(i) 号蚂蚁的实际位置应当在拥有 (i) 编号的蚂蚁的位置。

    考虑在直线上的情况,直接对应就行了。但现在是在环上,如果有一只蚂蚁逆时针经过0,那么1号蚂蚁最后的位置就会向前一位,顺时针则会向后一位。(想象成这只蚂蚁变成了负数,那么在直线上,他应该是最前面的,但先在在环上,所以他穿过去了,就会变成最后面的,所以原来在他后面的都会往前挪一位)

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 1e5 + 10;
    int n, l, t, ans[N]; 
    int main() {
    	scanf("%d%d%d", &n, &l, &t);
    	int cnt = 0;
    	for(int i = 0, x, w; i < n; i++){
    		scanf("%d%d", &x, &w);
    		x += ((w == 1) ? t : -t);
    		cnt = ((cnt + (int)floor(1.0 * x / l)) % n + n) % n; 
    		ans[i] = (x % l + l) % l;
    	}
    	sort(ans, ans + n);
    	for(int i = 0; i < n; i++)
    		printf("%d
    ", ans[(cnt + i) % n]); 
    	return 0;
    }
    
    qaqaq
  • 相关阅读:
    Oracle解除死锁
    观察者模式
    观察者模式
    第一个go程序
    第一个go程序
    Jersey处理表单Post信息
    Jersey处理表单Post信息
    JS获取操作系统及浏览器信息
    JS获取操作系统及浏览器信息
    Linux常用命令
  • 原文地址:https://www.cnblogs.com/zdsrs060330/p/15234337.html
Copyright © 2011-2022 走看看