CF - 652F Ants on a Circle】的更多相关文章

题目传送门 题解: 先观察蚂蚁相撞, 可以发现, 如果我们将相撞的2个蚂蚁互换位置的话,蚂蚁相当于没有碰撞体积,直接穿过去了.所以我们可以直接计算出最终哪些位置上会有蚂蚁. 接下来就需要知道蚂蚁们的最终是走到哪个位置上. 需要先明白的是, 蚂蚁的相对位置是不会发生变化的,他的左边和右边的蚂蚁是不会发生改变的. 我们通过记录顺时针第一只蚂蚁是什么编号. 假设X是第一只蚂蚁的编号. 如果有一只蚂蚁从 m-1 的位置走到 0 的位置,那么X会变成 X - 1. 如果有一只蚂蚁从 0 的位置走到 m-1…
题目连接:652F - Ants on a Circle 题目大意:\(n\)个蚂蚁在一个大小为\(m\)的圆上,每个蚂蚁有他的初始位置及初始面向,每个单位时间蚂蚁会朝着当前面向移动一个单位长度,在遇到其它蚂蚁时会立刻掉头.求经过\(t\)个单位时间后每一个蚂蚁的所在位置 题解:首先可以发现,最终答案其实是在不考虑碰撞下得出答案的一个排列,而且蚂蚁们的相对位置是不会改变的.所以如果求出了其中任意一个蚂蚁的位置,就能求出最终的答案. 为了方便起见,先默认所有蚂蚁的位置是按升序排的,且第一个蚂蚁的位…
Ants on a Circle 感觉这个思路好巧妙啊. 我们能发现不管怎么碰撞,初始态和最终态蚂蚁间的相对顺序都是一样的, 并且所占的格子也是一样的, 那么我们就只需要 找到其中一个蚂蚁的最终位置就能确定所有蚂蚁的位置了, 我们考虑找初始为止离0最近的那个蚂蚁的最终位置,我们能发现 蚂蚁从m-1->0  rk++, 蚂蚁从0->m-1 rk--, 在取模意义下rk就是那个蚂蚁的最终位置. #include<bits/stdc++.h> #define LL long long #…
atCoder Ants on a Circle(又是蚂蚁问题...) 传送门 题意:一个圈,蚂蚁在上面以相同的速度和不同的方向走,问t秒后它们各自的位置. 解法:和经典的蚂蚁问题一致,把相撞的情况看做是穿过,我们不需要关心穿过的蚂蚁去哪儿了,它们的位置是相对不变的.然而...这里的路线是一个圈,势必会出现原本排在第一的蚂蚁跑到了尾部,又或是排在尾部的蚂蚁跑到了第一,也就是说位置是会变得.但是我们只需要将首部的蚂蚁移动<0看做是这只蚂蚁被顶了上去,某只蚂蚁移动>=l看做试将一系列蚂蚁顶了回去.…
A. Circle of Students time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output There are…
考虑到蚂蚁们的相对位置不会变化,而且,如果把“相遇后掉头”看作是“相遇后交换编号”的话,也可以得出来最后都有哪些位置有蚂蚁 然后,只要确定哪个位置是“1”就可以了 然后搞一个指针p代表原来第一个位置的蚂蚁现在的位置(相对于0来说的),每当有蚂蚁穿过0位置,p就根据穿过的方向加加减减就可以了 #include<bits/stdc++.h> #include<tr1/unordered_map> #define CLR(a,x) memset(a,x,sizeof(a)) #defin…
题目大意 一个长度为\(lm\)的环上有\(n\)只蚂蚁,告诉你每只蚂蚁的位置和朝向,每只蚂蚁会向前爬,速度为\(1m/s\),两只蚂蚁相遇后都会掉头,问你\(t\)秒后每只蚂蚁的位置. \(n\leq 100000\) 题解 ypl大神把这个东西叫做弹性碰撞.有两个定理: ypl定理1:如果忽略个体之间的差异, 那么每个物体的运动可以看作是独立的. ypl定理2:如果不忽略个体之间的差异, 那么物体之间的相对顺序不会发生改变. 如果这不是一个环,而是一条直线,那就很简单了.我们可以把最终位置排…
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! 题目链接:AGC013C 正解:思维题 解题报告: 考虑这类蚂蚁有关的问题,都可以看作是在相遇的时候穿透而过的,但是同时我们发现,因为碰撞之后就会回头,所以相对位置不会改变,那么我可以得到一个最终的位置集合(直接算就好了,然后排个序). 我们就拿$1$号蚂…
题目链接 AtCoder:https://agc013.contest.atcoder.jp/tasks/agc013_c 洛谷:https://www.luogu.org/problemnew/show/AT2369 Solution 首先可以注意到他们的相对位置是不变的. 然后两只蚂蚁相遇可以看作是他们穿过了彼此然后交换编号. 那么我们就可以得到最后的位置了,只需要确定编号就好了. 注意到如果有一只蚂蚁穿过了\(l-1\sim 0\)之间,所有编号都会左移(右移)一格. 那么我们只需要处理出…
题目传送门:https://agc013.contest.atcoder.jp/tasks/agc013_c 题目翻译 给你一个周长为\(L\)的圆,有\(N\)只蚂蚁在圆上爬,速度为一单位距离每秒.有的蚂蚁是逆时针的,有的蚂蚁是顺时针的,蚂蚁互相碰面会转向,问你\(T\)秒后每只蚂蚁分别在什么地方.\(L,T\leqslant 10^9,N\leqslant 10^5\) 题解 碰面转向相当于不转向交换编号,所以我们可以求出最后每只蚂蚁会在哪个地方.然后只需要关注第一只蚂蚁最后的\(pos\)…