• 2015 测试赛 大神和小伙伴 hihoCoder


    立方和公式和平方和公式。表示从来不记得这些公式。。。

    每库礼物不同数量相同,总数=1+2+...+n=(n+1)*n/2

    选取礼物的可能性的最大值为[(n+1)*n/2]^3

    选取礼物价值重复两次的总数3*(1^2+2^2+...+n^2)*(1+2+...+n)=3*[n*(n+1)*(2*n+1)/6]*[(n+1)*n/2]=n^2*(n+1)^2*(2*n+1)/4=[n*(n+1)/2]^2*(2*n+1)

    选取礼物价值重复三次的总数1^3+2^3+...+n^3=[n*(n+1)/2]^2

    题目中的情况是总数-重复两次+重复三次的(因两次中的公式包含了一个三次的)

    [(n+1)*n/2]^2*(n^2-3*n+4)/2%MAX

    对于前一个平方式子,可以直接把2除去。对于后一个2,n(n-3)也可以除去。

    #include <iostream>
    
    using namespace std;
    long long T,n;
    long long tmp,temp,result,ans;
    long long MAX = 1e9 + 7;
    int main()
    {
      cin >> T;
      for(long long i = 0; i < T; i++)
      {
        cin >> n;
        cout << "Case " << i+1 << ": ";
        if(n%2==0)
        {
          tmp = n / 2 % MAX;
          temp = (n + 1) % MAX;
          result= ((tmp*((n-3)%MAX))%MAX+2)%MAX;
        }else
        {
          tmp = n % MAX;
          temp = (n + 1) / 2 % MAX;
          result=((((n-3)/2 %MAX)*n)%MAX+2)%MAX;
        }
        ans =( ((tmp * temp % MAX)*(tmp * temp % MAX))%MAX*result)%MAX;
        cout << ans << endl;
      }
      return 0;
    }
    

      

  • 相关阅读:
    步步为营-15-文件夹的操作
    步步为营-14-文件操作
    步步为营-13-日期转化
    步步为营-12-Dictionary-翻译
    步步为营-11-List<T>泛型的简单练习
    步步为营-10-string的简单操作
    步步为营-09-简单工厂类-计算器
    B. Fixed Points
    C. Cd and pwd commands
    Queries on a String
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/4415210.html
Copyright © 2020-2023  润新知