zoukankan      html  css  js  c++  java
  • POJ1150he Last Non-zero Digit(组合)

    链接

    题意从尾部找第一个非0的数 这样就可以考虑下怎样会形成0  这个都知道 只有因子2和因子5相遇会形成0 那这样可以先把所有的2和5先抽出来,这样就保证了其它的数相乘就不会再出现0了 这样就可以转换成尾数相乘的结果 当然可能2的个数会剩余 这一部分留到最后去算

    step1 抽出所有的5和2  n!里因子x的个数 求法: n/x+gn(n/x);

    这样结果就为1 3 7 9 之一  这样就需要求一下尾部3,,7,9的出现的次数,并且可以发现它们都是以4为周期的 包括2

    step2 尾部3 7 9出现的次数 f[n] + find(n/2) 因为抽走了2  x出现的次数g[n][x] = n/10+(n%10>=x)+ggn(n/5)因为抽走了5

    最后再把2的影响补上

    题意求N!/(n-m)!  因为N!包含(n-m)! 故可以通过各个数出现的次数相减求得最后的结果

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<vector>
     7 #include<cmath>
     8 #include<queue>
     9 #include<set>
    10 using namespace std;
    11 #define N 100000
    12 #define LL long long
    13 #define INF 0xfffffff
    14 const double eps = 1e-8;
    15 const double pi = acos(-1.0);
    16 const double inf = ~0u>>2;
    17 int o[10][2];
    18 int p[10][6];
    19 int gn(int n,int x)
    20 {
    21     if(n==0)
    22     return 0;
    23     return n/10+(n%10>=x)+gn(n/5,x);
    24 }
    25 int ggn(int n,int x)
    26 {
    27     if(n==0)
    28     return 0;
    29     return gn(n,x)+ggn(n/2,x);
    30 }
    31 int find0(int n,int x)
    32 {
    33     if(n==0) return 0;
    34     return n/x+find0(n/x,x);
    35 }
    36 int main()
    37 {
    38     int n,m;
    39     p[3][1] = 3,p[3][2] = 9,p[3][3] = 7,p[3][0] = 1;
    40     p[7][1] = 7,p[7][2] = 9,p[7][3] = 3,p[7][0] = 1;
    41     p[9][1] = 9,p[9][2] = 1,p[9][3] = 9,p[9][0] = 1;
    42     p[2][1] = 2,p[2][2] = 4,p[2][3] = 8,p[2][0] = 6;
    43     while(cin>>n>>m)
    44     {
    45         memset(o,0,sizeof(o));
    46         m = n-m;
    47         o[5][0] = find0(n,5);
    48         o[5][1] = find0(m,5);
    49         o[2][0] = find0(n,2);
    50         o[2][1] = find0(m,2);
    51 
    52         o[3][0] = ggn(n,3);
    53         o[7][0] = ggn(n,7);
    54         o[9][0] = ggn(n,9);
    55         o[3][1] = ggn(m,3);
    56         o[7][1] = ggn(m,7);
    57         o[9][1] = ggn(m,9);
    58         o[5][0] -= o[5][1];
    59         o[2][0] -= o[2][1];
    60         int a = o[3][0]-o[3][1];
    61         int b = o[7][0]-o[7][1];
    62         int c = o[9][0]-o[9][1];
    63         int k = o[2][0]-o[5][0];
    64         int ans = 1;
    65         if(a) ans*=p[3][a%4];
    66         if(b) ans*= p[7][b%4];
    67         if(c) ans*= p[9][c%4];
    68         if(k) ans*= p[2][k%4];
    69         cout<<ans%10<<endl;
    70     }
    71     return 0;
    72 }
    View Code
  • 相关阅读:
    mysql主从配置
    apache+mysql+php,安装整合配置。
    [转载]误将SELINUXTYPE看成SELINUX后,将其值改为disabled。导致操作系统服务启动,无法进入单用户模式
    python-趣味百题3
    python-趣味百题2
    python-趣味百题1
    python之路----1
    控件的textIsSelectable属性引起的血案
    导入eclipse项目 编码格式错误,运行包 不能映射的...编码
    Glide 缓存使用
  • 原文地址:https://www.cnblogs.com/shangyu/p/3644232.html
Copyright © 2011-2022 走看看