zoukankan      html  css  js  c++  java
  • 洛谷P1762 杨辉三角,规律

    https://www.luogu.org/problemnew/show/P1762

    题意:给定一个正整数n,请输出杨辉三角形前n行的偶数个数对1000003取模后的结果。

    由于N <= 1e15,这就暗示我们这是一道需要打表找规律的图。

    年轻的花花以为求偶数个数就应当打偶数个数的表,不料这题的规律在于奇数。

    所以一张完整的表应当把偶数个数,偶数个数和,奇数个数,奇数个数和,总数全部表示出来。

    当行数为2 ^ k时,该行的奇数为2 ^ k个,即全部为奇数,该行的奇数和为3 ^ k 个。

    所以当行数为2 ^ k的形式的时候,可以很容易的通过求和公式算出总个数再减去奇数的方式来计算答案。

    现在问题要扩展到行数不满足条件的时候

    规律就是将行数分为 p = 2 ^ k1 + 2 ^ k2 ....... + 2 ^kn的形式(kn > kn - 1 > .... > k2 > k1)

    易得这样的形式唯一,第p行的奇数和就是 1 * (3 ^ kn) + 2 * (3 ^ kn - 1 ) + ... + pow(2,n - 1) * (3 ^ k1)次。

    #include <map>
    #include <set>
    #include <ctime>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <string>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <sstream>
    #include <iostream>
    #include <algorithm>
    #include <functional>
    using namespace std;
    inline int read(){int now=0;register char c=getchar();for(;!isdigit(c);c=getchar());
    for(;isdigit(c);now=now*10+c-'0',c=getchar());return now;}
    #define For(i, x, y) for(int i=x;i<=y;i++)  
    #define _For(i, x, y) for(int i=x;i>=y;i--)
    #define Mem(f, x) memset(f,x,sizeof(f))  
    #define Sca(x) scanf("%d", &x)
    #define Sca2(x,y) scanf("%d%d",&x,&y)
    #define Sca3(x,y,z) scanf("%d%d%d",&x,&y,&z)
    #define Scl(x) scanf("%lld",&x);  
    #define Pri(x) printf("%d
    ", x)
    #define Prl(x) printf("%lld
    ",x);  
    #define CLR(u) for(int i=0;i<=N;i++)u[i].clear();
    #define LL long long
    #define ULL unsigned long long  
    #define mp make_pair
    #define PII pair<int,int>
    #define PIL pair<int,long long>
    #define PLL pair<long long,long long>
    #define pb push_back
    #define fi first
    #define se second 
    typedef vector<int> VI;
    const double eps = 1e-9;
    const int maxn = 110;
    const int INF = 0x3f3f3f3f;
    const int mod = 1000003; 
    LL N;
    int cnt;
    LL quick_power(LL a,LL b){
        LL ans = 1;
        while(b){
            if(b & 1) ans = (ans * a) % mod;
            b >>= 1;
            a = (a * a) % mod;
        }
        return ans;
    }
    LL solve(int x){
        LL sum = quick_power(3,x) * quick_power(2,cnt++) % mod;
        //cout << x << "  " << sum << endl;
        return  sum;
    }
    int main(){
        Scl(N);
        LL ans = 0;
        cnt = 0;
        for(int i = 60; i >= 0; i --){
            if(N & (1LL << i)) ans = (ans + solve(i)) % mod;
        }
        LL sum = (((N + 1) % mod) * (N % mod)) / 2 % mod;
        sum = ((sum - ans) % mod + mod) % mod;
        Prl(sum);
        return 0;
    }
  • 相关阅读:
    单细胞分析实录(13): inferCNV结合UPhyloplot2分析肿瘤进化
    单细胞分析实录(12): 如何推断肿瘤细胞
    单细胞分析实录(11): inferCNV的基本用法
    用网络图展示富集分析
    R绘图(6): 拯救初学者——发表级绘图全能包ggpubr
    R绘图(5): 一文学会桑基图的画法
    db2备份与还原
    SAP R/3系统的启动和关闭
    重启sap过程
    DB2重启数据库实例
  • 原文地址:https://www.cnblogs.com/Hugh-Locke/p/10270561.html
Copyright © 2011-2022 走看看