zoukankan      html  css  js  c++  java
  • NBOJv2 Problem 1009 蛤玮的魔法(二分)

    Problem 1009: 蛤玮的魔法

    Time Limits:  1000 MS   Memory Limits:  65536 KB

    64-bit interger IO format:  %lld   Java class name:  Main


    Description

    为了成为魔法少女,蛤玮正在学习画魔法阵,他首先画了一个正n边形,查阅魔法书后蛤玮发现书上要求魔法阵的面积不能超过L,他很头疼,因为用尺规作这个正n边形花了他好大经历,他不想重新画一边,于是他想了个好主意,把每条边的中点依次连起来,就能得到一个缩小的正n边行.现在蛤玮想知道他需要按着个方法缩小多少次才能合乎魔法书上的要求.

     

    Input

    T(1<=T<=100),表示数据组数.

    每组数据三个整数n(3<=n<=10),a(1<=a<=100),L(1<=L<=1000),其中a表示蛤玮画的正n边行的边长,n,L如题中描述.

    数据保证[L-1e-5,L+1e-5]内答案唯一.

     

    Output

    每组数据输出一个整数,表示蛤玮操作的次数.

     

    Sample Input

    1
    4 2 3

    Output for Sample Input

    1

    Hint

     

    Author

    2016郑州轻工业学院校赛

    以前too naive,暴力模拟写的,评测机估计比较快就过了……,实际上这题应该是二分

    代码:

    #include<iostream>
    #include<algorithm>
    #include<cstdlib>
    #include<sstream>
    #include<cstring>
    #include<cstdio>
    #include<string>
    #include<deque>
    #include<stack>
    #include<cmath>
    #include<queue>
    #include<set>
    #include<map>
    using namespace std;
    #define INF 0x3f3f3f3f
    #define MM(x,y) memset(x,y,sizeof(x))
    #define LC(x) (x<<1)
    #define RC(x) ((x<<1)+1)
    #define MID(x,y) ((x+y)>>1)
    typedef pair<int,int> pii;
    typedef long long LL;
    const double PI=acos(-1.0);
    double n,a,L,angle;
    double area(const double &nn,const double &a)
    {
    	return n*a*a/(4*tan(PI/n));
    }
    double dpow(double a,int b)
    {
    	double r=1;
    	while (b)
    	{
    		if(b&1)
    			r*=a;
    		a*=a;
    		b>>=1;
    	}
    	return r;
    }
    int main(void)
    {
    	int tcase;
    	int ans,mid,l,r;
    	scanf("%d",&tcase);
    	while (tcase--)
    	{
    		scanf("%lf%lf%lf",&n,&a,&L);
    		angle=(n-2)*180/n;
    		double rate=sin((angle/360)*PI);
    		l=0,r=3000000;
    		while (l<=r)
    		{
    			int mid=(l+r)>>1;
    			double temp=area(n,a*dpow(rate,mid));
    			if(temp<L)
    			{
    				r=mid-1;
    				ans=mid;
    			}	
    			else
    				l=mid+1;
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
  • 相关阅读:
    CF Round #569 Div2(contest1180)
    HY中考游记
    Luogu P2309 loidc,卖卖萌
    点击按钮使用window.open打开页面后,再次点击按钮会再打开一个页面,如何解决?
    line-height:150%/1.5em与line-height:1.5的区别
    table使用display:block时会多出一条边框
    让360双核浏览器默认极速模式,避免采用兼容模式
    使用nodejs安装http-server
    行内元素内边距对左右下起作用,外边距只对左右起作用
    微信小程序示例
  • 原文地址:https://www.cnblogs.com/Blackops/p/5766277.html
Copyright © 2011-2022 走看看