1008 Fractal (2015年北京赛区网络赛G题)

来源:互联网 发布:网络控制器是干嘛的 编辑:程序博客网 时间:2024/05/16 18:11

1.题目描述:点击打开链接

2.解题思路:本题利用代数分析即可解决。通过观察可以发现,有竖线的地方的横坐标均满足0.5-0.5^n。因此可以事先求出n,如果发现恰好是0.5-0.5^n,输出-1,否则输出4*n。

3.代码:

#include<iostream>#include<algorithm>#include<cassert>#include<string>#include<sstream>#include<set>#include<bitset>#include<vector>#include<stack>#include<map>#include<queue>#include<deque>#include<cstdlib>#include<cstdio>#include<cstring>#include<cmath>#include<ctime>#include<cctype>#include<complex>#include<functional>#pragma comment(linker, "/STACK:1024000000,1024000000")using namespace std;#define me(s)  memset(s,0,sizeof(s))#define rep(i,n) for(int i=0;i<(n);i++)typedef long long ll;typedef unsigned int uint;typedef unsigned long long ull;typedef pair <ll, ll> P;const int N=4000+10;const double eps=1e-10;int dcmp(double x){    if(fabs(x)<eps)return 0;    return x<0?-1:1;}int main(){    int T;    scanf("%d",&T);    while(T--)    {        double x;        scanf("%lf",&x);        int n=(int)floor(log(0.5-x)/log(0.5));        //printf("%d\n",n);        double res=1.0;        for(int i=0;i<n;i++)            res*=0.5;        res=0.5-res;        //cout<<res<<endl;        if(2*n-1<=1000&&dcmp(res-x)==0)puts("-1");        else        {            n=min(n,500);            printf("%d\n",4*n);        }    }}


0 0
原创粉丝点击