标签:
This is the logo of PKUACM 2016. More specifically, the logo is generated as follows:
1. Put four points A0(0,0), B0(0,1), C0(1,1), D0(1,0) on a cartesian coordinate system.
2. Link A0B0, B0C0, C0D0, D0A0 separately, forming square A0B0C0D0.
3. Assume we have already generated square AiBiCiDi, then square Ai+1Bi+1Ci+1Di+1 is generated by linking the midpoints of AiBi, BiCi, CiDi and DiAi successively.
4. Repeat step three 1000 times.
Now the designer decides to add a vertical line x=k to this logo( 0<= k < 0.5, and for k, there will be at most 8 digits after the decimal point). He wants to know the number of common points between the new line and the original logo.
In the first line there’s an integer T( T < 10,000), indicating the number of test cases.
Then T lines follow, each describing a test case. Each line contains an float number k, meaning that you should calculate the number of common points between line x = k and the logo.
For each test case, print a line containing one integer indicating the answer. If there are infinity common points, print -1.
3 0.375 0.001 0.478
-1 4 20
#include <iostream> #include <cmath> #include <algorithm> #include <cstring> #include <cstdio> #include <cstdlib> using namespace std; typedef long long LL; const LL INF = 0xfffffff; const int maxn = 105; const LL MOD = 1e9+7; double as[2000]; int main() { int T, ok, ans, i; double a=0, b=0.5; for(i = 1; i <= 1000; i++) { as[i] = (a+b)/2; a = (a+b)/2; } double x; scanf("%d", &T); while(T--) { scanf("%lf", &x); ok = 0; for(i = 0; i <= 1000; i++) { if(fabs(as[i] - x) < 1e-10) { ok = 1; break; } if(x > as[i-1] && x < as[i]) { ans = i; break; } } if(ok == 1) printf("-1\n"); else printf("%d\n", ans*4); } return 0; }
标签:
原文地址:http://www.cnblogs.com/PersistFaith/p/4828696.html