首页 > 代码库 > 正方形大阵(C++)

正方形大阵(C++)

正方形大阵
难度级别:D; 运行时间限制:1000ms; 运行空间限制:256000KB; 代码长度限制:2000000B
试题描述

技术分享

输入
第一行一个正整数n代表询问次数。

接下来n行每行一个不超过八位的小数k代表一组询问。
输出
输出共n行,代表每次询问的答案;如果有无数个交点,输出“-1”。
输入示例
3
0.375
0.001
0.478
输出示例
-1
4
20
其他说明
100%的数据满足1<=n<2*1000,0<k<0.5。选自tyvj
数学神题……

#include<iostream>
using namespace std;
double a[2004],A[2004];
int b[2004];
int n;
double k;
void init()
{
a[1]=0.25;
A[1]=0.25;
a[0]=0;
b[0]=4;
for(int i=2;i<=2001;i++)   {A[i]=(double)A[i-1]/2;}
for(int i=2;i<=2001;i++)   {a[i]=(double)(a[i-1]+(double)A[i]);}

for(int i=1;i<=2001;i++) b[i]=b[i-1]+4;
}
void ans(double k)
{
for(int i=1;i<=2001;i++) if(a[i]==k) {cout<<"-1"<<endl;return ;}
for(int i=1;i<=2001;i++) if(a[i-1]<k&&a[i]>k) {cout<<b[i-1]<<endl;return ;}
}
int main()
{
init();
cin>>n;
while(n--)
{
cin>>k;
ans(k);
}
}

正方形大阵(C++)