zoukankan      html  css  js  c++  java
  • bzoj3142 [Hnoi2013]数列

    Description

    小T最近在学着买股票,他得到内部消息:F公司的股票将会疯涨。股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为N。在疯涨的K天中小T观察到:除第一天外每天的股价都比前一天高,且高出的价格(即当天的股价与前一天的股价之差)不会超过M,M为正整数。并且这些参数满足M(K-1)<N。
    小T忘记了这K天每天的具体股价了,他现在想知道这K天的股价有多少种可能

    Input

    只有一行用空格隔开的四个数:N、K、M、P。对P的说明参见后面“输出格式”中对P的解释。
    输入保证20%的数据M,N,K,P≤20000,保证100%的数据M,K,P≤109,N≤1018 。

    Output

    仅包含一个数,表示这K天的股价的可能种数对于P的模值。【输入输出样例】

    Sample Input

    7 3 2 997

    Sample Output

    16
    【样例解释】
    输出样例的16表示输入样例的股价有16种可能:
    {1,2,3},{1,2,4},{1,3,4},{1,3,5}, {2,3,4},{2,3,5},{2,4,5},{2,4,6}, {3,4,5},{3,4,6},{3,5,6},{3,5,7},{4,5,6},{4,5,7},{4,6,7},{5,6,7}
     
    正解:数学。
     
    纯数学题。
    考虑差分一下,即记$sum_{i=1}^{k-1}del[i]=a[k]$。
    那么方案数为$sum(n-sum_{i=1}^{k-1}del[i])$。
    把式子拆开,变成$n*m^{k-1}-sum(sum_{i=1}^{k-1}del[i])$。
    考虑后面那个式子如何解决,我们可以发现,$[1,m]$的每一个数都是互不影响的。
    也就是说,$[1,m]$每一个数的总出现次数相等。
    那么后面那一坨就是$(k-1)*m^{k-1}/m*sum_{i=1}^{m}i=(k-1)*m^{k-2}*(m(m+1)/2)$。
    于是问题得到解决。
     
     1 #include <bits/stdc++.h>
     2 #define il inline
     3 #define RG register
     4 #define ll long long
     5 
     6 using namespace std;
     7 
     8 ll n,k,m,p;
     9 
    10 il ll qpow(RG ll a,RG ll b){
    11   RG ll ans=1;
    12   while (b){
    13     if (b&1) ans=ans*a%p;
    14     a=a*a%p,b>>=1;
    15   }
    16   return ans;
    17 }
    18 
    19 int main(){
    20 #ifndef ONLINE_JUDGE
    21   freopen("seq.in","r",stdin);
    22   freopen("seq.out","w",stdout);
    23 #endif
    24   cin>>n>>k>>m>>p;
    25   if (k==1) cout<<n;
    26   else cout<<(n%p*qpow(m,k-1)%p-(k-1)*qpow(m,k-2)%p*((m*(m+1)>>1)%p)%p+p)%p;
    27   return 0;
    28 }
  • 相关阅读:
    二分练习题4 查找最接近的元素 题解
    二分练习题5 二分法求函数的零点 题解
    二分练习题3 查找小于x的最大元素 题解
    二分练习题2 查找大于等于x的最小元素 题解
    二分练习题1 查找元素 题解
    code forces 1176 D. Recover it!
    code forces 1173 B. Nauuo and Chess
    code forces 1173 C. Nauuo and Cards
    吴恩达深度学习课程笔记-15
    吴恩达深度学习课程笔记-14
  • 原文地址:https://www.cnblogs.com/wfj2048/p/7376281.html
Copyright © 2011-2022 走看看