2022春每日一题:Day 23
题目:Piotr's Ants
蚂蚁转头走,其实可以看做他们交换灵魂后接着往前走,同样发现,既然他们的速度相同,那么在数轴上相对位置不会改变(碰面会改变方向),那就好办了。
先把初始状态排序,id都记录下来,再把结束状态排序,对应的l,r,turing标记,然后输出的时候只需要输出结束状态的dy[i]项即可。
代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
const int N=1e4+5;
using namespace std;
struct pos
{
int id,p,f;
pos(int ii,int pp,int ff)
{
id=ii;p=pp;f=ff;
}
pos(){
}
friend bool operator < (pos a,pos b)
{
return a.p<b.p;
}
}a[N],b[N];
char out[3][10]={"L","Turning","R"};
int dy[N];
void solve()
{
int l,n,t;
scanf("%d %d %d",&l,&t,&n);
for(int i=1;i<=n;i++)
{
int p;
char op[2];
scanf("%d %s",&p,op);
int kk=op[0]=='L'?-1:1;
a[i]=pos(i,p,kk);
b[i]=pos(i,p+t*kk,kk);
}
sort(a+1,a+1+n);
sort(b+1,b+1+n);
for(int i=1;i<=n;i++)
{
dy[a[i].id]=i;
if(b[i].p==b[i-1].p)
b[i].f=b[i-1].f=0;
}
for(int i=1;i<=n;i++)
{
int now=dy[i];
if(b[now].p<0 || b[now].p>l)
puts("Fell off");
else
printf("%d %s\n",b[now].p,out[b[now].f+1]);
}
puts("");
}
int main()
{
int T;
scanf("%d",&T);
for(int i=1;i<=T;i++)
{
printf("Case #%d:\n",i);
solve();
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App