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;
}
posted @   __honey  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示