zoukankan      html  css  js  c++  java
  • Uva10881 Piotr's Ants

    题意,长度为L的木棒上有n只蚂蚁,每只蚂蚁要么向左,要么向右,相撞的时候则会改变方向,问T秒后,妈妈的位置和方向

    这道题我们把蚂蚁抽象成一个个点来的话,我们会发现,蚂蚁碰撞之后,就像两个点“对穿而过:所以我们要计算出T秒后每个蚂蚁的位置

    但是T秒过后对应的位置上不一定是那只蚂蚁,可能是别的蚂蚁。我们就要搞清楚”谁是谁“

    通过模拟发现,蚂蚁经过T时间之后,相对顺序是不变的。所以我们把前后的位置排个序。则移动后的从左到右的顺序还是从左到右。但输入的时候并不是从左到右,所以我们还要用一个order数组记录输入的顺序

    AC代码如下:

    #include<stdio.h>
    #include<iostream>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    const int maxn=10000+100;
    const char dirName[][10]={"L","Turning","R"};
    int order[maxn];
    struct node
    {
    	int id;
    	int p;
    	int d;
    };
    bool cmp(node A,node B)
    {
    	return A.p<B.p; 
    }
    node b[maxn],a[maxn];
    int main()
    {
    	int t,n,cas=0,T,L;
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d %d %d",&L,&T,&n);
    		for(int i=0;i<n;i++)
    		{
    			int x;
    			char ch;
    			int p;
    			scanf("%d %c",&x,&ch);
    			int d=(ch=='L'?-1:1);
    			b[i].id=i;
    			b[i].p=x;
    			b[i].d=d;
    			a[i].id=0;
    			a[i].p=x+T*d;
    			a[i].d=d;
    		}
    		sort(b,b+n,cmp);
    		for(int i=0;i<n;i++)
    		order[b[i].id]=i;
    		sort(a,a+n,cmp);
    		for(int i=0;i<n-1;i++)
    		{
    			if(a[i].p==a[i+1].p)
    			{
    				a[i].d=a[i+1].d=0;
    			}
    		}
    		printf("Case #%d:
    ",++cas);
    		for(int i=0;i<n;i++)
    		{
    			int s=order[i];
    			if(a[s].p<0||a[s].p>L)
    			printf("Fell off
    ");
    			else
    			printf("%d %s
    ",a[s].p,dirName[a[s].d+1]);
    		}
    		printf("
    ");
    	}
    	return 0;
    }


  • 相关阅读:
    移动开发 Native APP、Hybrid APP和Web APP介绍
    urllib与urllib2的学习总结(python2.7.X)
    fiddler及postman讲解
    接口测试基础
    UiAutomator2.0 和1.x 的区别
    adb shell am instrument 命令详解
    GT问题记录
    HDU 2492 Ping pong (树状数组)
    CF 567C Geometric Progression
    CF 545E Paths and Trees
  • 原文地址:https://www.cnblogs.com/NaCl/p/9580132.html
Copyright © 2011-2022 走看看