您的位置:首页 > 其它

HDU 5752 Sqrt Bo

2016-07-26 19:41 330 查看
Problem Description

Let's define the function f(n)=⌊n√⌋.

Bo wanted to know the minimum number y which
satisfies fy(n)=1.

note:f1(n)=f(n),fy(n)=f(fy−1(n))

It is a pity that Bo can only use 1 unit of time to calculate this function each time.

And Bo is impatient, he cannot stand waiting for longer than 5 units of time.

So Bo wants to know if he can solve this problem in 5 units of time.

 

Input

This problem has multi test cases(no more than 120).

Each test case contains a non-negative integer n(n<10100).

 

Output

For each test case print a integer - the answer y or
a string "TAT" - Bo can't solve this problem.

 

Sample Input

233
233333333333333333333333333333333333333333333333333333333

 

Sample Output

3
TAT

简单题,一顿乱敲就过了,差一点一血诶。
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<bitset>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
#define rep(i,j,k) for (int i = j; i <= k; i++)
#define per(i,j,k) for (int i = j; i >= k; i--)
using namespace std;
typedef long long LL;
const int low(int x) { return x&-x; }
const int mod = 1e9 + 7;
const int N = 1e3 + 10;
const int INF = 0x7FFFFFFF;
int T, m;
char s
;
LL n;

int main()
{
//scanf("%d", &T);
while (scanf("%s", s) != EOF)
{
if (strlen(s) > 18) printf("TAT\n");
else
{
sscanf(s, "%lld", &n);
int ans = 0;
for (ans = 0; ans < 6 && n != 1; ans++)
{
n = sqrt(1.0*n);
}
if (ans < 6)printf("%d\n", ans);
else printf("TAT\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HDU