首页 > 其他分享 >Codeforces 1 C. Ancient Berland Circus

Codeforces 1 C. Ancient Berland Circus

时间:2022-12-06 16:13:53浏览次数:49  
标签:P2 p2 Ancient double Circus Codeforces p1 public Math

题意:

二维平面中,给定三个点,这三个点是正多边形的三个顶点,求正多边形最小的面积。

思路:

两对点分别求中垂线,相交点是多边形外接圆的圆心,圆心有了半径和角度也就有了,之后求一下gcd,再算一下多边形面积。

 

 

C# 10 .net6 代码

List<double> a = new();
List<double> b = new();
for (int i = 0; i < 3; i++)
{
    List<double> c = new();
    Console.ReadLine()!.Split(' ').ToList().ForEach(x => c.Add(double.Parse(x)));
    a.Add(c[0]);
    b.Add(c[1]);
}

P2 v0 = new P2(a[0], b[0]);
P2 v1 = new P2(a[1], b[1]);
P2 v2 = new P2(a[2], b[2]);

P2 o = P2.Intersection(
    (v0 + v1) * 0.5,
    (v0 + v1) * 0.5 + (v0 - v1).Normal(),
    (v2 + v1) * 0.5,
    (v2 + v1) * 0.5 + (v2 - v1).Normal());

double r = P2.Distance(v0, o);

List<double> th = new();
th.Add((v0 - o).Polar());
th.Add((v1 - o).Polar());
th.Add((v2 - o).Polar());

double Gcd(double x, double y, double eps = 1e-2)
{
    while (Math.Abs(x) > eps && Math.Abs(y) > eps)
    {
        if (x > y)
        {
            x -= Math.Floor(x / y) * y;
        }
        else
        {
            y -= Math.Floor(y / x) * x;
        }
    }

    return x + y;
}
double g = Gcd(Math.Abs(th[1] - th[0]), Math.PI * 2);
g = Gcd(g, Math.Abs(th[2] - th[0]));
g = Gcd(g, Math.Abs(th[2] - th[1]));
double n = Math.Round((2 * Math.PI) / g);
g = 2 * Math.PI / n;
Console.WriteLine(Math.PI * r * r * Math.Sin(g) / g);

struct P2
{
    double x, y;
    public P2()
    {
        x = 0;
        y = 0;
    }

    public P2(double x, double y)
    {
        this.x = x;
        this.y = y;
    }

    public static P2 operator +(P2 p1, P2 p2)
    {
        return new P2(p1.x + p2.x, p1.y + p2.y);
    }

    public static P2 operator -(P2 p1, P2 p2)
    {
        return new P2(p1.x - p2.x, p1.y - p2.y);
    }

    public static P2 operator *(P2 p, double k)
    {
        return new P2(p.x * k, p.y * k);
    }

    public static double Distance(P2 p1, P2 p2)
    {
        return Math.Sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));
    }

    public static P2 Intersection(P2 p1, P2 p2, P2 q1, P2 q2)
    {
        return p1 + (p2 - p1) * (((q2 - q1).Det(q1 - p1)) / ((q2 - q1).Det(p2 - p1)));
    }

    public P2 Normal()
    {
        return new P2(y, -x);
    }

    public double Dot(P2 p)
    {
        return x * p.x + y * p.y;
    }

    public double Det(P2 p)
    {
        return x * p.y - p.x * y;
    }

    public double Polar()
    {
        return Math.Atan2(y, x);
    }

    public override string ToString()
    {
        return $"[{x},{y}]";
    }
}

 

标签:P2,p2,Ancient,double,Circus,Codeforces,p1,public,Math
From: https://www.cnblogs.com/luobo67/p/16955570.html

相关文章

  • Codeforces 1 B. Spreadsheets
    题意:EXCEL单元格位置表示方法相互转化 R23C55<=>RC23思路AAA<=>26^2+26+1用到知识点:正则表达式匹配字符串反转字符串出现位置C#10.net6代码usin......
  • Codeforces Global Round 1~3
    CF1110C回答\(q\)个关于\(a\)的询问,每次询问求:\(f(a)=max_{0<b<a}gcd(a\bigoplusb,a\&b)\),\(a<2^{25}\)假设\(a\)有\(k\)位,对\(a\)取个反,即\(b=\overlinea\)就......
  • Codeforces 1 A. Theatre Square
    题意:给定一块n*m大小的地方,用边长为a的石板全部覆盖。求最少需要多少石块覆盖。公式: (n+a-1)%a注意:数据范围用long运算先后关系,加括号C#10.net6代......
  • CodeForces 822F Madness
    CF传送门洛谷传送门*2500的黑(首先不考虑最小化字典序,我们发现\(res_i\ge\dfrac{2}{deg_u}\)。意思是理想的状态就是在一段周期内平均分配。这个下界是可以达到的,......
  • Codeforces Round #815 (Div. 2)
    比赛链接C题意:给定一个大小为n*m的01矩阵,每次操作你可以消除一个L形(\(2*2\)矩阵)内的所有1,每次必须保证消除至少一个1,求操作数的最大值。核心思路:这个其实我们需要模......
  • Educational Codeforces Round 132 (Rated for Div. 2)
    https://codeforces.com/contest/1709C.RecoveranRBS题意:这里原本有一个合法的括号序列,现在将这个合法的括号序列中的一部分字符串替换为?你可以将?替换为(或者)......
  • Codeforces Round #832 (Div. 2)
    A.TwoGroups(CF1747A)题目大意给定一个整数数组\(a\),要求将\(a\)分成两部分\(s1,s2\),要求两部分的和的绝对值的差最大。即最大化\(|\sum(s_1)|-|\sum(s_2)|\)......
  • Codeforces Round #816 (Div. 2)
    [比赛链接](Dashboard-CodeforcesRound#816(Div.2)-Codeforces)B题意:给定数组长度n,参数k,\(\sum_{1}^{n}a_i/k=b\),并且区间和是s。其中b和s都是题目给定的。核......
  • CodeForces - 476C-Dreamoon and Sums(数学思维)
    C.DreamoonandSums题解:设则有题目所求可得所以代码#include<bits/stdc++.h>typedeflonglongLL;usingnamespacestd;constintmod=1e9+7;intmain(){#ifndefO......
  • Codeforces Global Round 10 H. ZS Shuffles Cards
    题目链接设f[i]表示还有i个数不在集合内的期望步数,尝试列一下转移式,会发现式子由转移到下一轮的期望步数和之后的DP值组成,考虑DP的转移过程,就会发现答案为转移到下一轮的......