2011 Multi-University Training Contest 3 - Host by BIT


The Lost Traveler

Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 556    Accepted Submission(s): 153


Problem Description
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.
 

Input
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)
 

Output
For each case, output one line. If bob can go back to start point, print "Yes". Otherwise, print "No".
 

Sample Input
  
  
2 3 -120.00 120.00 120.00 2 120.00 -120.00
 

Sample Output
  
  
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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值