Sqrt Bo
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 493 Accepted Submission(s): 227
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
题解:由于有5的的这个限制,所以尝试寻找分界点,很容易发现分界点是2^32,所以我们判断这个数字是否比2^32要大,如果大的话直接输出‘TAT‘,否则暴力开根即可
#include <algorithm>
#include <iostream>
#include <numeric>
#include <cstring>
#include <iomanip>
#include <string>
#include <vector>
#include <cstdio>
#include <queue>
#include <stack>
#include <cmath>
#include <map>
#include <set>
#define LL long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const LL Max = (1LL<<32) - 1;
const double esp = 1e-6;
const double PI = 3.1415926535898;
const int INF = 0x3f3f3f3f;
using namespace std;
char arr[120];
int main(){
while(~scanf("%s",arr)){
LL num = 0;
bool f = false;
for(int i=0;arr[i]!='\0';i++){
num = num * 10 + (arr[i] - '0');
if(num > Max){
f = true;
break;
}
}
if(f || num == 0)
printf("TAT\n");
else{
int ans = 0;
while(num > 1){
ans += 1;
num = floor(sqrt(num));
}
printf("%d\n",ans);
}
}
return 0;
}