codeforces 652F
来源:互联网 发布:淘宝催确认订单给好评 编辑:程序博客网 时间:2024/05/04 20:20
原题
原题链接
题目大意
给你
解题思路
如果我们设每只蚂蚁都是相同的,那么两只蚂蚁相撞可以理解为两只蚂蚁各在自己的路上继续走。我们就可以知道最后蚂蚁们在哪里。由于蚂蚁是有序的,所以我们不能知道哪只蚂蚁对应哪个位置。
还有就是,蚂蚁之间的相对顺序是固定的,因为,蚂蚁相撞会往原方向的相反方向行走。
其实,由于上面两个推理,我们只需知道任意一只蚂蚁的位置,我们就可以求出所有蚂蚁的位置了。
参考代码
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)#define maxn 300005#define ll long longusing namespace std;ll n,m,t;ll a[maxn],dirt[maxn],pos[maxn],now[maxn],p[maxn],ans[maxn];bool cmp(ll x,ll y){ return a[x]<a[y];}int main(){ scanf("%I64d%I64d%I64d",&n,&m,&t); fo(i,1,n) { scanf("%I64d",&a[i]); a[i]--; char ch=getchar(); while (ch!='L' && ch!='R') ch=getchar(); if (ch=='L') dirt[i]=0; else dirt[i]=1; pos[i]=i; } sort(pos+1,pos+n+1,cmp); ll rot=0; fo(i,1,n) { if (dirt[i]==0) { now[i]=((a[i]-t) % m+m)% m; rot=(rot+(a[i]-t-now[i]) / m) % n; rot=(rot % n+n) % n; } else { now[i]=(a[i]+t) % m; rot=(rot+(a[i]+t-now[i]) / m) % n; rot=(rot % n+n) % n; } } sort(now+1,now+n+1); fo(i,1,rot) p[n-rot+i]=now[i]; fo(i,rot+1,n) p[i-rot]=now[i]; fo(i,1,n) ans[pos[i]]=p[i]+1; fo(i,1,n) printf("%I64d ",ans[i]); return 0;}
1 0
- codeforces 652F
- Codeforces 659F F
- CodeForces 652F. Ants on a Circle
- Codeforces 234 F. Fence
- 【Codeforces 500F】Dp
- codeforces 234F - Fence
- F-Logo Turtle codeforces
- 【CODEFORCES】 F. Ant colony
- Codeforces 567F
- CodeForces 241F Race
- Codeforces 611F 思维
- Codeforces 542F 构造
- codeforces 626f
- codeforces 622f
- codeforces 628F
- codeforces 632F
- codeforces 653F
- codeforces 618F
- Linux网络编程--使用epoll,共享内存技术实现高性能的聊天室程序
- MTK TP驱动移植
- JSON-RPC说说
- map里面放的list,list放的是对象,怎么遍历
- extern "C"的用法解析
- codeforces 652F
- 有关测试的各种模型
- 浅谈属性动画简单使用之实现爱的贝塞尔曲线浪漫告白效果(三)
- Unity3D手游开发日记(5) - 适合移动平台的植被随风摆动
- JQuery选择器中层级关系老是记不清楚怎么办,总结下看看。
- 以图搜图 相似图片搜索的原理(二)
- 初识Hadoop
- 正则表达式
- Java 二维维数组遍历测试