zoukankan      html  css  js  c++  java
  • Codeforces 474C Captain Marmot 给定4个点和各自旋转中心 问旋转成正方形的次数

    题目链接:点击打开链接

    题意:

    给定T表示case数

    以下4行是一个case

    每行2个点,u v

    每次u能够绕着v逆时针转90°

    问最少操作多少次使得4个u构成一个正方形。

    思路:

    枚举判可行




    #include <iostream>
    #include <cmath>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    int hah,ijj;
    int haifei;
    template <class T>
    inline bool rd(T &ret) {
        char c; int sgn;
        if(c=getchar(),c==EOF) return 0;
        while(c!='-'&&(c<'0'||c>'9')) c=getchar();
        sgn=(c=='-')?

    -1:1; ret=(c=='-')?

    0:(c-'0'); while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0'); ret*=sgn; return 1; } template <class T> inline void pt(T x) { if (x <0) { putchar('-'); x = -x; } if(x>9) pt(x/10); putchar(x%10+'0'); } /////////////////////// const double eps = 1e-8; const double pi = acos(-1.0); struct node { double x, y; }; bool dcmp(double i, double j) { return fabs(i - j) <= eps; } bool eq(const node& i, const node& j) { return dcmp(i.x, j.x) && dcmp(i.y, j.y); } /* x0= (x - rx0)*cos(a) - (y - ry0)*sin(a) + rx0 ; y0= (x - rx0)*sin(a) + (y - ry0)*cos(a) + ry0 ; */ node turn(const node& i, const node& j, double a) { node re; re.x= (i.x - j.x)*cos(a) - (i.y - j.y)*sin(a) + j.x; re.y= (i.x - j.x)*sin(a) + (i.y - j.y)*cos(a) + j.y; return re; } bool cc(const node& i, const node& j) { if (!dcmp(i.x, j.x)) return i.x < j.x; else return i.y < j.y; } double sqr(double x) { return x * x; } double D(node i, node j) { return sqr(i.x-j.x) + sqr(i.y-j.y); } double dis[20]; int idx; bool ok(node i, node j, node k, node z) { node ar[4]; ar[0]=i; ar[1]=j; ar[2]=k; ar[3]=z; idx = 0; for (int i = 0; i < 4; ++i) for (int j = i + 1; j < 4; ++j) dis[idx++]=D(ar[i],ar[j]); sort(dis, dis +idx); if (dcmp(dis[0], dis[3]) && !dcmp(dis[0], 0) && dcmp(dis[4], dis[5]) && dcmp(dis[0] * 2, dis[4])) { return true; } else return false; } int main() { node a[10], b[10]; int T; rd(T); while (T -- > 0) { for (int i = 0; i < 4; ++i) scanf("%lf%lf%lf%lf", &a[i].x, &a[i].y, &b[i].x, &b[i].y); int ans = 100; for (int i = 0; i < 4; ++i) for (int j = 0; j < 4; ++j) for (int k = 0; k < 4; ++k) for (int l = 0; l < 4; ++l) if (ok(turn(a[0], b[0], i*pi/2),turn(a[1], b[1], j*pi/2), turn(a[2], b[2], k*pi/2),turn(a[3], b[3], l*pi/2))) { ans = min(i+j+k+l, ans); } if (ans == 100) ans = -1; pt(ans); putchar(' '); } return 0; }



  • 相关阅读:
    [USACO Mar08] 牛跑步 --k短路
    [ZJOI2008]树的统计Count
    [SDOI2010]魔法猪学院 --k短路
    POJ 2449 Remmarguts' Date -K短路
    [SCOI2007]kshort--k短路
    [HAOI2015]树上操作 -树链剖分
    HDU Aragorn's Story -树链剖分
    [USACO09JAN]安全出行Safe Travel
    2019全球区块链杭州高峰论坛将于5月17日举办!
    2019亚洲物联网安全创新国际峰会将于5月在上海开幕!
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5173755.html
Copyright © 2011-2022 走看看