牛客编程巅峰赛S2赛季(高级场第3场)考题参考代码(非官方)

简单的公式

const int mode=1e9+7;
class Solution {
public:
    /**
     * 返回c[n]%1000000007的值
     * @param n long长整型 即题目中的n
     * @return int整型
     */
     long long Mode(long long a, long long b){
        long long sum = 1;
        while (b) {
            if (b%2) {
                sum =(sum*a)%mode;
                b--;
            }
            b/=2;
            a=a*a%mode;
      }
    return sum;
}
    int Answerforcn(long long n) {
        // write code here
        long long an=2*Mode(3,n-1)%mode;
        long long bn=7*Mode(5,n-1)%mode;
        long long cn=an*bn%mode;
        int ans=cn;
        return ans;
    }
};


Tree VI

class Solution
{
public:
    typedef long long ll;
    ll n, k, d[100010];
    ll ans = 0, cnt = 1;
 
    inline void dfs(ll x, ll p)
    {
        for (ll i = -k + 2; i <= 1; ++i) {
            if (x * k + i <= n) {
                ++cnt;
                ans += (d[p] ^ d[cnt]);
                dfs(x * k + i, cnt);
            } else return;
        }
    }
    long long tree6(int K, vector<int> &a)
    {
        n = a.size();
        k = K;
        for (int i = 0; i < n; ++i)
        {
            d[i + 1] = a[i];
        }
        dfs(1, 1);
        return ans;
    }
};



整除问题

class Solution {
  using ll = long long;
 
  ll get_43(ll n) {
    ll ans = n / 43;
    ans = ans - ans / 47;
    return ans;
  }
 
  ll get_47(ll n) {
    ll ans = n / 47;
    ans = ans - ans / 43;
    return ans;
  }
 
  ll get_2021(ll n) { return n / 2021; }
 
  ll get(ll n, ll m) {
    ll ans = 0;
    // 43*47
    ans = ans + get_43(n) * get_47(m);
    ans = ans + get_47(n) * get_43(m);
 
    // 1*2021
    ans = ans + n * get_2021(m);
    ans = ans + m * get_2021(n);
    ans = ans - get_2021(n) * get_2021(m);
 
    return ans;
  }
 
public:
  /**
   * 寻找所有能整除 2021 的数对个数
   * @param A long长整型
   * @param B long长整型
   * @param C long长整型
   * @param D long长整型
   * @return long长整型
   */
  long long findPairs(long long A, long long B, long long C, long long D) {
    ll ans = get(B, D);
    ans = ans - get(A - 1, D);
    ans = ans - get(B, C - 1);
    ans = ans + get(A - 1, C - 1);
 
    return ans;
  }
};
 


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务