HDU 5752 Sqrt Bo

来源:互联网 发布:淘宝皇冠转让 编辑:程序博客网 时间:2024/05/24 05:00
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(fy1(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
233233333333333333333333333333333333333333333333333333333333
 

Sample Output
3TAT

简单题,一顿乱敲就过了,差一点一血诶。

#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;}


0 0
原创粉丝点击