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.
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) .
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[N]; 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; }