zoukankan      html  css  js  c++  java
  • hdu 4937 2014 Multi-University Training Contest 7 1003

    Lucky Number

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 664    Accepted Submission(s): 194

    Problem Description
    “Ladies and Gentlemen, It’s show time! ”
       “A thief is a creative artist who takes his prey in style... But a detective is nothing more than a critic, who follows our footsteps...”
    Love_Kid is crazy about Kaito Kid , he think 3(because 3 is the sum of 1 and 2), 4, 5, 6 are his lucky numbers and all others are not.
       Now he finds out a way that he can represent a number through decimal representation in another numeral system to get a number only contain 3, 4, 5, 6.
       For example, given a number 19, you can represent it as 34 with base 5, so we can call 5 is a lucky base for number 19.
       Now he will give you a long number n(1<=n<=1e12), please help him to find out how many lucky bases for that number.
       If there are infinite such base, just print out -1.
     
    Input
       There are multiply test cases.
       The first line contains an integer T(T<=200), indicates the number of cases.
       For every test case, there is a number n indicates the number.
     
    Output
       For each test case, output “Case #k: ”first, k is the case number, from 1 to T , then, output a line with one integer, the answer to the query. 
     
    Sample Input
    2 10 19
     
    Sample Output
    Case #1: 0 Case #2: 1
    Hint
    10 shown in hexadecimal number system is another letter different from ‘0’-‘9’, we can represent it as ‘A’, and you can extend to other cases.
     
    Author
    UESTC
     
    Source
     
    Recommend
    We have carefully selected several similar problems for you:  4944 4943 4942 4941 4940 
     
    题意、题解,转自:
     

    题意:

    我们将3,4,5,6认为是幸运数字。给定一个十进制数n。现在可以讲起任意转换成其他进制,但转换后的数必须是由3,4,5,6构成的,而这个进制称为幸运进制。问有多少个幸运进制。若有无数个,则输出-1。例如19在5进制下是34,所以5是幸运进制。

    题解:

    先考虑特殊情况,所情况下会有无穷个?只有n=3,4,5,6的时候,因为这几个数在大于n的进制下都是他本身。。注意特殊情况不包括33,343这些(我一开始就死在这里了,wa了三次)。因为33在34进制下就不是33了(类似于10在16进制下就是A了)。

    我们知道n=a0+a1*x+a2*x^2+...,其中x为进制。由于n达到1e12,所以我们分情况讨论。

    1)a0形式,我们已经在特殊情况中指出,只有无穷个的时候才会符合条件

    2)a0+a1*x形式,枚举a0,a1,我们判断(n-a0)是否能被a1整除,以及x是否大于max(a0,a1)即可。

    3)a0+a1*x+a2*x^2,我们枚举a0,a1,a2,那么就相当于解一元二次方程。判断是否有整数解,是否整数解x>max(a0,a1,a2)即可。

    4)不在上述三种形式内的,那么进制x最大也不会x^3>n,不然就会变成上述三种的形式。我们就可以枚举进制然后判断是否为幸运进制了。由于x^3<=n,所以复杂度只有1e4。

    注意:就是上述的特殊情况,死的惨惨的。。

    代码:

      1 #include<iostream>
      2 #include<cstring>
      3 #include<cstdlib>
      4 #include<cstdio>
      5 #include<algorithm>
      6 #include<cmath>
      7 #include<queue>
      8 
      9 #define N 100005
     10 #define M 10005
     11 #define mod 1000000007
     12 #define mod2 100000000
     13 #define ll long long
     14 #define maxi(a,b) (a)>(b)? (a) : (b)
     15 #define mini(a,b) (a)<(b)? (a) : (b)
     16 
     17 using namespace std;
     18 
     19 int T;
     20 int f[N];
     21 ll n;
     22 
     23 void ini()
     24 {
     25     memset(f,0,sizeof(f));
     26     int i,j;
     27     int te,yu;
     28     for(i=1;i<=M;i++){
     29         for(j=4;j<=10000;j++){
     30             te=i;
     31             int flag=1;
     32             while(te){
     33                 yu=te%j;
     34                 if(yu!=3 && yu!=4 && yu!=5 && yu!=6){
     35                     flag=0;break;
     36                 }
     37                 te/=j;
     38             }
     39             if(flag==1) f[i]++;
     40         }
     41     }
     42     f[3]=f[4]=f[5]=f[6]=-1;
     43 
     44    // for(i=1;i<=M;i++){
     45     //    printf(" i=%d f=%d
    ",i,f[i]);
     46     //}
     47 }
     48 
     49 int main()
     50 {
     51     ll ans;
     52     ll j,i,k;
     53     ll a,b,c,d;
     54     ll base;
     55     //freopen("data.in","r",stdin);
     56    // ini();
     57     scanf("%d",&T);
     58     for(int cnt=1;cnt<=T;cnt++)
     59     {
     60         ans=0;
     61         printf("Case #%d: ",cnt);
     62         scanf("%I64d",&n);
     63         if(n>=3 && n<=6){
     64             printf("-1
    ");continue;
     65         }
     66 
     67         for(i=3;i<=6;i++){
     68             for(j=3;j<=6;j++){
     69                 if( (n-i)%j==0 && (n-i)/j >max(i,j) ) ans++;
     70             }
     71         }
     72       //  printf(" %I64d
    ",ans);
     73 
     74         for(i=3;i<=6;i++){
     75             for(j=3;j<=6;j++){
     76                 for(k=3;k<=6;k++){
     77                     a=i;b=j;c=k-n;
     78                     ll te=sqrt(b*b-4*a*c+0.5);
     79                     if(te*te!=b*b-4*a*c) continue;
     80                     if(te<b) continue;
     81                     d=(te-b);
     82                     if(d%(2*a)==0){
     83                         base=d/2/a;
     84                         if(base>max(max(i,j),k))ans++;
     85                     }
     86                 }
     87             }
     88         }
     89 
     90       //  printf("  %I64d
    ",ans);
     91 
     92         //printf("%I64d
    ",ans);
     93 
     94         for(j=4;j*j*j<=n;j++){
     95             ll te=n;
     96             int flag=1;
     97                 while(te){
     98                     ll yu=te%j;
     99                     if(yu!=3 && yu!=4 && yu!=5 && yu!=6){
    100                         flag=0;break;
    101                     }
    102                     te/=j;
    103                 }
    104             if(flag==1) ans++;
    105         }
    106         printf("%I64d
    ",ans);
    107        // }
    108 
    109 
    110     }
    111     return 0;
    112 }
  • 相关阅读:
    每日一水 POJ8道水题
    编译和使用 MySQL C++ Connector
    j2ee model1模型完成分页逻辑的实现 详解!
    DB查询分析器访问EXCEL时,要在表名前后加上中括弧或双引号
    指向结构体变量的指针
    EOSS V3.0 企业运营支撑系统(基于RBAC原理的权限管理)
    MybatisGen1.0 Mybatis JavaBean Mapper生成工具
    The table name must be enclosed in double quotation marks or sqare bracket while accessing EXCEL by
    资源-Android:Android
    软件-开发软件:Android Studio
  • 原文地址:https://www.cnblogs.com/njczy2010/p/3909755.html
Copyright © 2011-2022 走看看