首页 > 代码库 > hdoj 5752
hdoj 5752
Let‘s define the function f(n)=?n??√?f(n)=?n?.
Bo wanted to know the minimum number yy which satisfies fy(n)=1fy(n)=1.
note:f1(n)=f(n),fy(n)=f(fy?1(n))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 yy which satisfies fy(n)=1fy(n)=1.
note:f1(n)=f(n),fy(n)=f(fy?1(n))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.
InputThis problem has multi test cases(no more than 120120).
Each test case contains a non-negative integer n(n<10100)n(n<10100).OutputFor each test case print a integer - the answer yyor a string "TAT" - Bo can‘t solve this problem.Sample Input
233 233333333333333333333333333333333333333333333333333333333
Sample Output
3 TAT
1 /* 2 要在五次内开跟达到1,第一次要在4以内,第二次在16以内, 3 第三次256,第四次65536,第五次4294967296,所以超过10位的都是TAT*/ 4 5 #include<cstdio> 6 #include<iostream> 7 #include<cstring> 8 #include<queue> 9 #include<cmath> 10 using namespace std; 11 12 char ch[110]; 13 14 long long i; 15 const long long num=4294967296-1; 16 17 int main() 18 { 19 while(~scanf("%s",ch)) 20 { 21 int r=strlen(ch); 22 int l=0; 23 while(ch[l]==‘0‘) l++; 24 if(r-l>10) 25 { 26 printf("TAT\n"); 27 continue ; 28 } 29 i=0; 30 while(l<r) 31 { 32 i=i*10+(ch[l]-‘0‘); 33 l++; 34 } 35 //cout<<i<<endl; 36 if(i>num||i==0) 37 { 38 printf("TAT\n"); 39 } 40 else 41 { 42 int ii=0; 43 while(i!=1) 44 { 45 i=(long long )sqrt(i); 46 //cout<<i<<endl; 47 ii++; 48 } 49 printf("%d\n",ii); 50 } 51 } 52 }
1 #include <iostream> 2 #include <stdio.h> 3 #include <math.h> 4 #include <string.h> 5 using namespace std; 6 #define MAXN 10000000 7 char str [MAXN]; 8 int main() 9 { 10 while(~scanf("%s",str)){ 11 int len=strlen(str); 12 if(len>10){printf("TAT");continue;} 13 else{ 14 long long n=0;bool flag=0; 15 for(int i=0;i<len;i++) n=n*10+str[i]-‘0‘; 16 for(int i=1;i<=5;i++){ 17 n=sqrt(n); 18 if(n==1){flag=1;printf("%d\n",i);break;} 19 } 20 if(flag==0) printf("TAT"); 21 } 22 } 23 return 0; 24 }
hdoj 5752
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。