首页 > ACM题库 > HDU-杭电 > HDU 3862-The Lost Traveler-模拟-[解题报告]HOJ
2015
04-13

HDU 3862-The Lost Traveler-模拟-[解题报告]HOJ

The Lost Traveler

问题描述 :

Bob is a robot who lives in a two-dimensional world. One day, he decided to go out for a travel. There are two kinds of traveling ways for Bob: to walk forward, and to rotate. When he searched the path with his iPhone 4, he only downloaded part of the data because of the bad signal. The data just indicated a series of directions for rotation. Bob decided to go on his trip according to this data.

Bob got started at the center of the two-dimensional world (at least he thought he did), and began to move forward. He can walk far enough (but he can’t stay at the same place, even in starting point) and then stop to rotate according to the data. The paths can get intersected.

However, Bob didn’t know whether he could get back home or not. So he turned to you for help.

For example, the data indicates like this:
Move forward (He must move for a distance greater than zero. He must not stay and make the next turning without moving forward. The same goes for the following.)
Turn 120 degrees anti-clockwise
Move forward
Turn 120 degrees clockwise
Move forward
Turn 120 degrees clockwise
Move forward
  
Bob could walk like the figure shows, and he’ll get back home.

The King’s Problem

输入:

The first line of the input gives the number of test cases, T. T est cases follow.
  
Each test case begins with a line containing an integer N,representing the number of degrees. N degrees follow.0<N<100000
  
Each line contains a number D with a precision of two decimal places, positive for clockwise, negative for anti-clockwise. (-360.00 <= D <= 360.00)

输出:

The first line of the input gives the number of test cases, T. T est cases follow.
  
Each test case begins with a line containing an integer N,representing the number of degrees. N degrees follow.0<N<100000
  
Each line contains a number D with a precision of two decimal places, positive for clockwise, negative for anti-clockwise. (-360.00 <= D <= 360.00)

样例输入:

2
3
-120.00
120.00
120.00
2
120.00
-120.00

样例输出:

Yes
No

 

判断一下是不是所有方向都在一条直线的同一边就行了。

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
#define eps 1e-6
using namespace std;

double a[100010];

int main()
{
    int cas;
    int n,i;
    bool flag;
    scanf("%d",&cas);
    while(cas--)
    {
        a[0]=0;
        flag=true;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
        {
            double b;
            scanf("%lf",&b);
            a[i]=360.0+a[i-1]+b;
            while(a[i]>=360.0)
                a[i]-=360.0;
        }
        sort(a+1,a+n+1);
        for(i=1;i<=n;i++)
            if(a[i]-a[i-1]>=180)
            {
                flag=false;
                break;
            }
        if(a[n]<=180)
            flag=false;
        if(n==1&&a[1]==180)
            flag=true;
        if(flag)
            printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

参考:http://blog.csdn.net/ydykl/article/details/6653800


  1. 站长,你好!
    你创办的的网站非常好,为我们学习算法练习编程提供了一个很好的平台,我想给你提个小建议,就是要能把每道题目的难度标出来就好了,这样我们学习起来会有一个循序渐进的过程!