zoukankan      html  css  js  c++  java
  • hdu 5187 zhx's contest

    题目分析
    如果n=1,答案是1,否则答案是2n2。 证明:ai肯定是最小的或者最大的。考虑另外的数,如果它们的位置定了的话,那么整个序列是唯一的。 那么ai是最小或者最大分别有2n1种情况,而整个序列单调增或者单调减的情况被算了2次,所以要减2。 要注意的一点是因为p>231,所以要用快速乘法。用法与快速幂相同。如果直接乘会超过long long范围,从而wa掉。

    快速幂+快速乘法

    #include<cstdio>
    #include<cstring>
    #include<cmath>

    using namespace std;
    typedef long long ll;

    ll quickmul(ll x,ll m,ll p) //快速乘法,与快速幂相似
    {
    ll re=0;
    while(m)
    {
    if(m&1)
    {
    re=(re+x)%p;
    }
    x=(x+x)%p;
    m>>=1;
    }
    return re;
    }
    ll PowerMod(ll x, ll n, ll p)
    {
    if (n ==0)
    {
    return 1;
    }
    ll temp = PowerMod(quickmul(x , x,p), n/2, p); //递归计算(X*X)^[N/2]
    if ((n &1) !=0) //判断n的奇偶性
    {
    temp = quickmul(temp , x, p);
    }
    return temp;
    }
    int main()
    {
    ll n,p;
    while(scanf("%I64d %I64d",&n,&p)!=EOF)
    {
    if(n==1)
    {
    if (p==1) printf("0 ");
    else printf("1 ");
    }
    else
    printf("%I64d ", (PowerMod(2,n,p)+p-2)%p);
    }
    return 0;
    }

    吐槽一下,在ubuntu的codeblocks中,n,p定义为全局变量,结果正确,定义在main中,结果不对,为此浪费了好多时间,欢迎大神指教!!!



  • 相关阅读:
    Win10 UWP Tile Generator
    Win10 BackgroundTask
    UWP Tiles
    UWP Ad
    Win10 build package error collections
    Win10 八步打通 Nuget 发布打包
    Win10 UI入门 pivot multiable DataTemplate
    Win10 UI入门 导航滑动条 求UWP工作
    UWP Control Toolkit Collections 求UWP工作
    Win10 UI入门 SliderRectangle
  • 原文地址:https://www.cnblogs.com/tsw123/p/4347607.html
Copyright © 2011-2022 走看看