• 【基础分治】


    我真是个垃圾,滚回去刷普及组了

    1>快速幂+模运算

    #include<cstdio>
    #include<cstdlib>
    using namespace std;
    long long a,b,k;
    
    long long q_pow(long long x,long long y)
    {
        int i=0;
        long long j=x,sum=1;
        while(y)
        {
            if(y&(1<<i))
            {
                y^=(1<<i);
                sum=sum*j%k;
            }
            i++,j=j*j%k;
        }
        return sum%k;//注意这里要写mod,因为如果b==0,则不会进入循环 
    }
    
    int main()
    {
        scanf("%lld%lld%lld",&a,&b,&k);
        
        printf("%lld^%lld mod %lld=%lld",a,b,k,q_pow(a%k,b));
        
        return 0;
    }

    我好垃圾啊,水题随便一写就是一小时,难过

    2>幂次方

    分解成二进制数

    #include<cstdio>
    #include<cstdlib>
    using namespace std;
    int n;
    int f[20001],lg[20001];
    void pre()
    {    
        int i=1,j=0;
        while(i<20001)
        {
            f[i]=j;
            i<<=1,j++;
        }
        
        for(int i=2;i<20001;i++)
        {
            lg[i]=lg[i-1];
            if(f[i]) lg[i]++;
        }
    }
    
    void dfs(int x)
    {
        if(x==1) printf("2(0)");
        else if(x==2) printf("2");
        else
        {
            int i=lg[x];
            x^=(1<<i);
            
            printf("2");
            if(i>1) printf("("),dfs(i),printf(")");
            
            while(x && --i)
                if(x&(1<<i))
                {
                    printf("+");
                
                    printf("2");
                    if(i>1) printf("("),dfs(i),printf(")");
                
                    x^=(1<<i);
                }
            
            if(x) printf("+2(0)");
        }
    }
    
    int main()
    {
        scanf("%d",&n);
        
        pre();
        dfs(n);
        
        return 0;
    } 

    3>CDQ求逆序对数

  • 相关阅读:
    Java面试题
    大二上学期周总结
    大二上每日总结
    大二上每日总结
    大二上每日总结
    大二上每日总结
    大二上每日总结
    大二上学期周总结
    大二上每日总结
    大二上每日总结
  • 原文地址:https://www.cnblogs.com/xwww666666/p/11368333.html
Copyright © 2020-2023  润新知