zoukankan      html  css  js  c++  java
  • Freda的访客 【找规律+快速幂】

    题目描述

    N 只小猫来到了Freda 的城堡做客!Freda 很高兴,拿出了蛋糕和饼干来招待它们,每一只小猫都可以吃到蛋糕或者饼干,当然,每只小猫具体拿到的是蛋糕还是饼干是由Freda 决定的。

    小猫们看到蛋糕比饼干大之后,普遍认为蛋糕比饼干要好>.<。所以,如果Freda 给了第i 只小猫蛋糕且这个小猫是第一个吃到蛋糕的,那么就必须给第i+2,i+4,i+6......只小猫蛋糕。
    也就是说,如果存在正整数i,满足:
    1、对于所有的0<j<i,第j 只小猫吃到的是饼干
    2、第i 只小猫吃到的是蛋糕
    那么就必须有:
    对于所有的i<k<=N, k mod 2 = i mod 2,第k 只小猫吃到的是蛋糕。
    小猫的数目一多,Freda 就忙不过来了。请你帮忙计算,Freda 一共有多少种可能的方法来招待这N 只小猫?

     

    分析

    详见大犇博客解析:

    http://blog.163.com/accelerator_sw/blog/static/27326128420175481419341/

     

    在这里附上我的代码:

    #include <iostream>
    
    #include <cstdio>
    
    #include <cstring>
    
    #include <algorithm>
    
    #define m 1000000007
    
    using namespace std;
    
    long long n;
    
    long long poww(long long p)
    
    {
    
        if(p==0) return 1;
    
        long long tmp=poww(p/2)%m;
    
        tmp=(tmp*tmp)%m;
    
        if(p%2==1)
    
            tmp*=2;
    
        tmp%=m;
    
        return tmp;    
    
    }
    
    
    
    int main()
    
    {
    
        cin>>n;
    
        if((n-1)%2==1)
    
        {
    
            long long x=n/2;
    
            cout<<((poww(x)-1)*2+poww(x))%m<<endl;
    
        }
    
        else
    
        {
    
            long long x=(n-1)/2;
    
            cout<<((poww(x+1)-1)*2)%m<<endl;
    
        }
    
        return 0;
    
    
    }
    View Code
  • 相关阅读:
    HDU 4608 I-number
    hdu 4607 ( Park Visit )
    ZROI十一集训Day2
    CodeForces1230
    模拟退火
    ZROI#1007
    ZROI#1006
    ZROI#1005
    ZROI#1004
    ZROI#962
  • 原文地址:https://www.cnblogs.com/linda-fcj/p/7206148.html
Copyright © 2011-2022 走看看