zoukankan      html  css  js  c++  java
  • 【NOIp模拟赛】antipalindrome

    分析

    知识点:排列组合问题。

    本题貌似和回文字符串没有太大的关系。

    仔细划一下应该就能知道最后的答案是:$ans=m*(m-1)*(m-2)*....*(m-2)$

    但是还是有很多坑的,数据很强一个想不到就会WA声一片。

    1.要特判n==1的情况 此时答案就是$m%mod$。

    2.m==1的情况就不用特判了,因为m==1的话,$m-1=0$,所以答案最终是0。

    3.注意中间过程的溢出,做数论的题目一定要注意这一点。

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    const ll mod=1e9+7;
    inline ll read()
    {
        register ll x=0,f=1; char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}
        return x*f;
    }
    ll n,m,ans;
    ll power(ll a,ll p){
        ll res=1,base=a%mod;//防止中间过程溢出
        for(register ll i=p;i;i=i>>1,base=base*base%mod)
        if(i&1) res=res*base%mod;
        return res;
    }
    int main()
    {
        freopen("anti.in","r",stdin);
        freopen("anti.out","w",stdout);
        register int T=read();
        while(T--){
            n=read();m=read();
            if(n==1) ans=m%mod;
            else{
                ans=power(m-2,n-2);
                ans=(ans*(m%mod))%mod;//最好分步做,清晰不容易出错
                ans=(ans*((m-1)%mod))%mod;//防止溢出
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
    欢迎转载,转载请注明出处!
  • 相关阅读:
    Code Forces Gym 100886J Sockets(二分)
    CSU 1092 Barricade
    CodeChef Mahesh and his lost array
    CodeChef Gcd Queries
    CodeChef GCD2
    CodeChef Sereja and LCM(矩阵快速幂)
    CodeChef Sereja and GCD
    CodeChef Little Elephant and Balance
    CodeChef Count Substrings
    hdu 4001 To Miss Our Children Time( sort + DP )
  • 原文地址:https://www.cnblogs.com/huihao/p/7637127.html
Copyright © 2011-2022 走看看