codeforces 994 C. Two Squares(數學)
阿新 • • 發佈:2018-12-30
思路:一個是正的一個成45度角,第二個四邊形完全在第一個上下左右就肯定不相交,要看的就是類似圖中的情況,其實只要看中間這個小四邊形周長和那個45度角四邊形上下邊界的差的大小關係就好了了,多畫幾張圖可以看出來.....
#include <cstdio> #include <cstdlib> #include <cstring> #include <bitset> #include <cmath> #include <cctype> #include <iostream> #include <algorithm> #include <string> #include <vector> #include <queue> #include <map> #include <set> #include <sstream> #include <iomanip> using namespace std; typedef long long ll; typedef unsigned long long ull; const ll inff = 0x3f3f3f3f3f3f3f3f; #define FOR(i,a,b) for(int i(a);i<=(b);++i) #define FOL(i,a,b) for(int i(a);i>=(b);--i) #define REW(a,b) memset(a,b,sizeof(a)) #define inf int(0x3f3f3f3f) #define si(a) scanf("%d",&a) #define sl(a) scanf("%I64d",&a) #define sd(a) scanf("%lf",&a) #define ss(a) scanf("%s",a) #define mod int(1e9+7) #define pb push_back #define lc (d<<1) #define Pll pair<ll,ll> #define P pair<int,int> #define pi acos(-1) P a[5],b[5]; int main() { cin.tie(0); cout.tie(0); int x=inf,y=-inf,z=inf,w=-inf; int x1=inf,y1=-inf,z1=inf,w1=-inf; FOR(i,1,4) { cin>>a[i].first>>a[i].second; x=min(x,a[i].first); y=max(a[i].first,y); z=min(z,a[i].second); w=max(a[i].second,w); } FOR(i,1,4) { cin>>b[i].first>>b[i].second; x1=min(x1,b[i].first); y1=max(b[i].first,y1); z1=min(z1,b[i].second); w1=max(b[i].second,w1); } if(x>y1||x1>y||z1>w||w1<z) puts("NO"); else { int c,d; c=min(abs(x1-y),abs(y1-x)); d=min(abs(w1-z),abs(z1-w)); if((c+d)*2<abs(w1-z1)) puts("NO"); else puts("YES"); } return 0; }