提出 #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;
}
提出情報
提出日時
2018-07-31 19:47:16+0900
問題
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
結果
セット名
テストケース
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