zoukankan      html  css  js  c++  java
  • hdu 3481 3482

    Good Serial Inc.比较简单;

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define maxn 1000009
    #define ll long long
    using namespace std;
    const ll mod=987654321;
    ll f[maxn];
     
    int main()
    {
        ll n,m;
        f[1]=1;
        for(ll i=2;i<maxn-1;i++)
        {
            f[i]=f[i-1]*i;
            if(f[i]>mod)f[i]%=mod;
        }
        while(scanf("%lld%lld",&n,&m)&&(n+m)>0)
        {
            ll ans=1;
            if(n<m||m==1||m==2)
            {
                while(n>0)
                {
                    if(n&1)ans*=m;
                    if(ans>mod)ans%=mod;
                    n>>=1;
                    m*=m;
                    if(m>mod)m%=mod;
                }
            }
            else
            {
                ans=f[m]+m;
                if(ans>mod)ans%=mod;
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
    View Code

    Bad Serial Inc.稍微复杂点,但是还是比较好理解的;

    dp[i][j]表示长度为i的数组最后j位相同的数目;

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #define maxn 109
    #define ll long long
    #define mod 987654321
    using namespace std;
    
    ll dp[maxn][11];
    
    int main()
    {
        ll n,m;
        while(scanf("%lld%lld",&n,&m)&&(n+m)>0)
        {
            if(m==1){puts("0");continue;}
            if(m==2)
            {
                if(n==1)puts("2");
                else puts("0");
                continue;
            }
            memset(dp,0,sizeof dp);
            dp[1][1]=m;
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<m;j++)
                {
                    if(dp[i][j]>mod)dp[i][j]%=mod;
                    dp[i+1][j+1]+=dp[i][j]*(m-j);//后一位与前j位都不相同
                    for(int k=2;k<=j;k++)
                        dp[i+1][k]+=dp[i][j];//后一位与前j位的某一位相同
                    if(j>1||i==1)
                    {
                        for(int k=1;k<m-1;k++)
                            dp[i+k][1]+=dp[i][j];//连续多少位相同
                    }
                }
            }
            ll ans=0;
            for(int i=1;i<m;i++)
                ans+=dp[n][i];
            cout<<ans%mod<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    flask
    admin站点管理
    DRF
    基础
    通过djangocrontab扩展来实现 定时任务
    配置asgi来达到能处理websocket
    用es实现模糊搜索
    迁移问题
    启动活动的最佳写法
    启动活动的最佳写法
  • 原文地址:https://www.cnblogs.com/yours1103/p/3594487.html
Copyright © 2011-2022 走看看