• Codeforces Round #421 (Div. 2)B. Mister B and Angle in Polygon(模拟+精度控制)


    传送门

    题意

    给出正n多边形和一个数a,寻找与a最接近的角,输出角编号

    分析

    找出多边形上所有角,一一比对即可

    trick

    1.判断的时候注意精度,i.e.x-eps>0
    2.double与double相除时不要立刻转化成int,可能会有误差

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    #define ll long long
    #define F(i,a,b) for(int i=a;i<=b;++i)
    #define R(i,a,b) for(int i=a;i<b;++i)
    #define mem(a,b) memset(a,b,sizeof(a))
    //#pragma comment(linker, "/STACK:102400000,102400000")
    //inline void read(int &x){x=0; char ch=getchar();while(ch<'0') ch=getchar();while(ch>='0'){x=x*10+ch-48; ch=getchar();}}
    int check(double x)
    {
    	if(x>(1e-6)&&x<180-(1e-6)) return 1;return 0;
    }
    int n;
    double a;
    set<double>s;
    int main()
    {
    	cin>>n>>a;
    	double x=(n-2)*1.0/n*180,y=(180-x)/2,ret=y;
    	while(check(x)&&check(y))
    	{
    		s.insert(x);s.insert(y);
    		x-=ret,y+=ret;
    	}
    	double ans=1000,num;
    	for(set<double>::iterator it=s.begin();it!=s.end();++it)
    	{
    		if(ans>abs((*it)-a)) {ans=abs((*it)-a);num=(*it);}
    	}
    	//printf("%f %f
    ",num,ret);
    	double k=num/ret;
    	printf("%d %d %.f
    ",2,1,2+k);
        return 0;
    }
    /*
    13 4
    100000 1
    */
    
  • 相关阅读:
    烯烃(olefin) 题解
    二分图的考验 题解
    树上的好题
    [SDOI2013]直径 题解
    [ZJOI2010]数字计数 题解
    神在夏至祭降下了神谕 题解
    洛谷 P4198 楼房重建 题解
    [HAOI2010]软件安装 题解
    [POI2011]ROT-Tree Rotations 题解
    可并堆之左偏树浅谈
  • 原文地址:https://www.cnblogs.com/chendl111/p/7116768.html
Copyright © 2020-2023  润新知