[数学 几何] 51Nod 1512 向量翻转 & Codeforces #79 (Div. 1 Only) 101C Vectors

来源:互联网 发布:淘宝充值 赚客吧 编辑:程序博客网 时间:2024/05/23 07:23

可以发现ABC其实都可以旋转 转来转去无非是变幻下坐标系

那么我们设D为C旋转后的向量 B0B1B2B3为旋转后的xiangliang

那么就是判断 A+xC+yD=B0/B1/B2/B3 是否有整数解 注意些细节


#include<cstdio>#include<cstdlib>#include<algorithm>#define X first#define Y secondusing namespace std;typedef long long ll;typedef pair<ll,ll> abcd;inline bool calc(ll a1,ll b1,ll c1,ll a2,ll b2,ll c2){  if (!a1 && !b1 && c1) return 0;  if (!a2 && !b2 && c2) return 0;  return ((b1*a2-b2*a1)?(c1*a2-c2*a1)%(b1*a2-b2*a1)==0:(c1*a2-c2*a1)==0) && ((b2*a1-b1*a2)?(c1*b2-c2*b1)%(b2*a1-b1*a2)==0:(c1*b2-c2*b1)==0);}abcd a,b,c,d;int main(){  freopen("t.in","r",stdin);  freopen("t.out","w",stdout);  scanf("%lld%lld%lld%lld%lld%lld",&a.X,&a.Y,&b.X,&b.Y,&c.X,&c.Y);  d.X=-c.Y; d.Y=c.X;  int ans=0;  ans|=calc(c.X,d.X,b.X-a.X,c.Y,d.Y,b.Y-a.Y);  b=abcd(-b.Y,b.X);  ans|=calc(c.X,d.X,b.X-a.X,c.Y,d.Y,b.Y-a.Y);  b=abcd(-b.Y,b.X);  ans|=calc(c.X,d.X,b.X-a.X,c.Y,d.Y,b.Y-a.Y);  b=abcd(-b.Y,b.X);  ans|=calc(c.X,d.X,b.X-a.X,c.Y,d.Y,b.Y-a.Y);  ans?printf("YES\n"):printf("NO\n");  return 0;}


0 0
原创粉丝点击