2013-2-22 ACM-第三次月赛 1005 BT飞船

BT飞船
Time Limit : 3000/1000ms (Java/Other)   Memory Limit :  65535/32768K (Java/Other)
Total Submission(s) : 0   Accepted Submission(s) : 0

Font: Times New Roman | Verdana | Georgia

Font Size:

Problem Description

外星人 BT 近日要乘他的飞船造访地球。为了访问结束后能安全返回,他必须把自己的飞船水平停稳在地面上。于是 BT 就提前指示自己的手下,在地球上找一片大空地,钉好 n 个大柱子作为飞船降落的支架。
BT 的飞船可以看作一个巨大的正 n 边形,降落时每一个柱子刚好对应一个角的位置。由于 BT 的手下多数比较脑残,只顾着测量柱子的位置而没有注意到他们钉的柱子的长度是否完全一样,这样就有可能出现飞船不能水平停住的情况。如果飞船停不好,BT 就回不去外星球了,他就会把这些手下都杀掉。
现在按顺时针顺序给出每一个钉好的柱子的长度,请你帮忙看看这些手下能否活命。

Input

第一行一个正整数 t <= 10,表示已造好的支架数。
接下来 t 行,先给出一个正整数 n(3 <=  n <= 200),表示柱子的个数
之后 n 个数表示每个柱子的长度 x(0 < x < 2000)

Output

一共 t 行,对于每个支架,若符合降落要求,则输出“Yeah!” 否则输出,“T_T”。(不包括引号)

Sample Input

3
3 3 3 3
4 1 2 1 2
6 2 2 2 2 1 1

Sample Output

Yeah!
T_T
T_T

Author

OIer

Source

小KD的OI题库
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int cmp(const void *a,const void *b){
    return *((int *)b)-*((int *)a);
}
int dis(int a,int b,int n){
    int d1,d2;
    if(a>b){
        d1=a-b;
        d2=n-a+b;
        return d1<d2?1:2;
    }
    else{
        d1=b-a;
        d2=n-b+a;
        return d1<d2?2:1;
    }
}
int main(){
    int t,n;
    int l[201][2];
    int end,min,max;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d",&l[i][0]);
            l[i][1]=i+1;
        }
        qsort(l,n,sizeof(l[0]),cmp);
        end=n;
        for(int i=0;i<n;i++)
            if(l[i][0]!=l[i+1][0]){
                end=i+1;break;
            }
        int fl=1,fr=1;
        for(int i=0;i<end&&fl&&fr;i++){
            fl=fr=0;
            for(int j=0;j<end;j++){
                if(i==j)continue;
                if(dis(l[i][1],l[j][1],n)==1)
                    fl=1;
                else fr=1;
            }
        }
        if(fl&&fr)
            printf("Yeah!\n");
        else
            printf("T_T\n");
    }
}

你可能感兴趣的:(ACM,ACM)