提出 #2926440


ソースコード 拡げる

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
#define esp 1e-10
#define PI acos(-1)
using namespace std;
struct Point{
    double x,y;
    Point(double _x=0,double _y=0):x(_x),y(_y){}
};
typedef Point Vector;
Vector operator + (Vector A,Vector B){
    return Vector(A.x+B.x,A.y+B.y);
}
Vector operator - (Vector A,Vector B){
    return Vector(A.x-B.x,A.y-B.y);
}
Vector operator * (Vector A,double d){
    return Vector(A.x*d,A.y*d);
}
Vector operator / (Vector A,double d){
    return Vector(A.x/d,A.y/d);
}
bool operator < (const Point &A,const Point &B){
    return A.x<B.x||(A.x==B.x&&A.y<B.y);
}
int dcmp(double x){
    if(fabs(x)<esp)return 0;
    return x<0?-1:1;
}
bool operator == (const Point &A,const Point &B){
    return dcmp(A.x-B.x)==0&&dcmp(A.y-B.y)==0;
}
double Dot(Vector A,Vector B){        //点乘
    return (A.x*B.x+A.y*B.y);
}
double Length(Vector A){              //向量的长度
    return sqrt(Dot(A,A));
}
double angle(Vector v){               //向量的极角:从x轴正方向转到该向量的弧度,逆时针-正,顺时针-负
    return atan2(v.y,v.x);
}
double Cross(Vector A,Vector B){      //叉乘
    return (A.x*B.y-A.y*B.x);
}
Vector Rotate(Vector A,double rad){   //向量逆时针旋转rad弧度
    return Vector(A.x*cos(rad)-A.y*sin(rad),A.x*sin(rad)+A.y*cos(rad));
}

const int maxn=105;
int N;
double H,W,R;
Point P[maxn];
bool Check(Point P1,Point P2,double limit,double rad){
    Point C=P1+Vector(1,0);
    P2=P1+Rotate(P2-P1,-rad);
    double _max=max(P1.x,P2.x),_min=min(P1.x,P2.x);
    for(int i=0;i<N;i++){
        Point p=P1+Rotate(P[i]-P1,-rad);
        if(p==P1||p==P2)continue;
        if(Cross(C-P1,p-P1)<0)return 0;
        if(Cross(p-P2,C-P1)<0)return 0;
        _min=min(_min,p.x);
        _max=max(_max,p.x);
    }
    return _max-_min<=limit;
}
bool solve(){
    double d,_maxd=0,_maxlimit=sqrt(W*W+H*H);
    for(int i=0;i<N;i++){
        for(int j=0;j<N;j++)if(i!=j){
            _maxd=max(d=Length(P[i]-P[j]),_maxd);
            if(_maxd>_maxlimit)return 0;
            double rad=angle(P[j]-P[i]);
            if(H<=d&&Check(P[i],P[j],W,rad-asin(H/d)))return 1;
            if(W<=d&&Check(P[i],P[j],H,rad-asin(W/d)))return 1;
        }
    }
    return _maxd<=min(H,W);
}
int main(){
    while(~scanf("%d%lf%lf%lf",&N,&H,&W,&R)){
        H-=2*R;W-=2*R;
        for(int i=0;i<N;i++)scanf("%lf%lf",&P[i].x,&P[i].y);
        printf((H>0&&W>0)&&(N==1||solve())?"Yes\n":"No\n");
    }
    return 0;
}

提出情報

提出日時
問題 H - Tiny Room
ユーザ xbb0720
言語 C++14 (GCC 5.4.1)
得点 100
コード長 2642 Byte
結果 AC
実行時間 4 ms
メモリ 384 KiB

コンパイルエラー

./Main.cpp: In function ‘int main()’:
./Main.cpp:88:60: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
         for(int i=0;i<N;i++)scanf("%lf%lf",&P[i].x,&P[i].y);
                                                            ^

ジャッジ結果

セット名 All
得点 / 配点 100 / 100
結果
AC × 45
セット名 テストケース
All 00_sample_00, 00_sample_01, 00_sample_02, 00_sample_03, 10_small_0, 10_small_1, 10_small_2, 10_small_3, 10_small_4, 20_random_0, 20_random_1, 20_random_2, 20_random_3, 20_random_4, 30_yes_00, 30_yes_01, 30_yes_02, 30_yes_03, 30_yes_04, 30_yes_05, 30_yes_06, 30_yes_07, 30_yes_08, 30_yes_09, 30_yes_10, 30_yes_11, 30_yes_12, 30_yes_13, 30_yes_14, 30_yes_15, 30_yes_16, 30_yes_17, 30_yes_18, 30_yes_19, 30_yes_20, 40_no_0, 40_no_1, 40_no_2, 40_no_3, 40_no_4, 40_no_5, 50_yes_convex_0, 50_yes_convex_1, 51_no_convex_0, 51_no_convex_1
ケース名 結果 実行時間 メモリ
00_sample_00 AC 3 ms 384 KiB
00_sample_01 AC 1 ms 256 KiB
00_sample_02 AC 1 ms 256 KiB
00_sample_03 AC 1 ms 256 KiB
10_small_0 AC 1 ms 256 KiB
10_small_1 AC 1 ms 256 KiB
10_small_2 AC 1 ms 256 KiB
10_small_3 AC 1 ms 256 KiB
10_small_4 AC 1 ms 256 KiB
20_random_0 AC 1 ms 256 KiB
20_random_1 AC 1 ms 256 KiB
20_random_2 AC 4 ms 384 KiB
20_random_3 AC 1 ms 256 KiB
20_random_4 AC 1 ms 256 KiB
30_yes_00 AC 2 ms 256 KiB
30_yes_01 AC 2 ms 256 KiB
30_yes_02 AC 2 ms 256 KiB
30_yes_03 AC 1 ms 256 KiB
30_yes_04 AC 1 ms 256 KiB
30_yes_05 AC 2 ms 256 KiB
30_yes_06 AC 1 ms 256 KiB
30_yes_07 AC 1 ms 256 KiB
30_yes_08 AC 1 ms 256 KiB
30_yes_09 AC 2 ms 256 KiB
30_yes_10 AC 2 ms 256 KiB
30_yes_11 AC 1 ms 256 KiB
30_yes_12 AC 2 ms 256 KiB
30_yes_13 AC 1 ms 256 KiB
30_yes_14 AC 1 ms 256 KiB
30_yes_15 AC 1 ms 256 KiB
30_yes_16 AC 1 ms 256 KiB
30_yes_17 AC 2 ms 256 KiB
30_yes_18 AC 1 ms 256 KiB
30_yes_19 AC 1 ms 256 KiB
30_yes_20 AC 2 ms 256 KiB
40_no_0 AC 2 ms 256 KiB
40_no_1 AC 2 ms 256 KiB
40_no_2 AC 2 ms 256 KiB
40_no_3 AC 2 ms 256 KiB
40_no_4 AC 2 ms 256 KiB
40_no_5 AC 2 ms 256 KiB
50_yes_convex_0 AC 2 ms 256 KiB
50_yes_convex_1 AC 1 ms 256 KiB
51_no_convex_0 AC 3 ms 256 KiB
51_no_convex_1 AC 3 ms 256 KiB