• 【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;
    }
    欢迎转载,转载请注明出处!
  • 相关阅读:
    9. Palindrome Number
    7. Reverse Integer
    650. 2 Keys Keyboard
    646. Maximum Length of Pair Chain
    523. Continuous Subarray Sum
    516. Longest Palindromic Subsequence
    dp问题解题思路
    494. Target Sum
    小波变换网文精粹:小波:看森林,也看树木(一)
    数学、海豚和花朵
  • 原文地址:https://www.cnblogs.com/huihao/p/7637127.html
Copyright © 2020-2023  润新知