题目描述

Hzy在和她的n只兔兔玩。
兔兔们站成一行,每次,Hzy可以选择一个区间[l,r],然后抱抱区间里的所有兔兔,并获得等同于区间长度r−l+1的愉悦度。每个区间Hzy只能选择一次,请问Hzy一共能获得多少愉悦度?
因为这个数太大了,所以Hzy只需要你输出这个数对109+7取模后的结果。

输入

一行一个正整数n,表示Hzy的兔兔的数量(n≤1018)。

输出

一行一个正整数,表示Hzy获得的总愉悦度对109+7取模后的结果。

样例输入

4

样例输出

20

【小结】:

一开始自己开始做,一直以为这是一道规律题,后来发现,是推公式的。

首先你写出前5组事例,就是n=[1,5],然后发现这是一个组合数

他的规律就是:C(n+2,n-1)

我以为可以套用Lucas来写的,后来发现自己还是年轻了点,因为时间过不去。

超时代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod = 1e9+7;
ll qmul ( ll a, ll b ){ll ans=0;while(b){if(b&1){ans=(ans+a)%mod;}a=(a+a)%mod;b>>=1;}return ans;
}
ll qpow ( ll a, ll b ){ll ans=1;a=a%mod;while(b){if(b&1){ans=qmul(ans,a);}a=qmul(a,a);b>>=1;}return ans%mod;
}
ll C(ll n,ll m){if(m>n) return 0;ll ans=1;for (ll i=1;i<=m;i++){ll a=(n+i-m)%mod;ll b=i%mod;ans=ans*(a*qpow(b,mod-2)%mod)%mod;}return ans;
}
ll Lucas (ll n,ll m){if ( m==0 ) return 1;return C(n%mod,m%mod)*Lucas(n/mod,m/mod)%mod;}
/*ll solve(ll n){ll ans=0;ans=qmul(qpow(n,2),(n+1))*qpow(2,mod-2)%mod;ans=(ans-qmul(n,(n+1))*qpow(2,mod-2)%mod+mod)%mod;ans=(ans-qmul(qmul(n,(n+1)),(2*n+1))*qpow(6,mod-2)%mod+mod)%mod;return ans;
}*/
int main()
{ll n;scanf("%lld",&n);printf("%lld\n",Lucas(n+2,n-1));return 0;
}

后来发现,这个原来要推公式来做的,

公式就是。

以n=5为例子:

然后大家看:

ans=5*1+4*2+3*3+2*4+1*5

推广到n。

ans=n*(1) + (n-1) * 2 +(n-2) *3+ ……+(1)*n

ans=n*(1) + (n-1) * 2 +(n-2) *3+ ……+(n-(n-1))*n

ans=(1+2+……+n)*n-1*2-2*3-……-(n-1)*n

分成两部分,

前半部分直接套用等差数列前n项求和公式即可,后半部分,我都不会推导,然后我找到的百度帮忙。

求:1*2+2*3+3*4+……+(n-1)*n


应该是1*2+2*3+3*4+...+n(n+1) 吧
一。n(n+1)=n^2+n
原式=(1^2+1)+(2^2+2)+(3^2+3)...+(n^2+n)
=(1^2+2^2+3^2+4^2+5^2...+n^2)+(1+2+3+...+n)
分组求和,根据公式1^2+2^2+3^2+4^2+5^2...+n^2=n(n+1)(2n+1)/6以及 1+2+3+...+n=n*(n+1)/2
所以原式=n(n+1)(2n+1)/6 + n*(n+1)/2 =(n+2)(n+1)n/3
二。裂项求和。
n(n+1)=[(n+2)(n+1)n-(n+1)n(n-1)]/3
也就是 1*2=(3*2*1-2*1*0)/3,
2*3=(4*3*2-3*2*1)/3.....
所以原式=(3*2*1-2*1*0)/3 + (4*3*2-3*2*1)/3 +(5*4*3-4*3*2)/3 +...+[(n+2)(n+1)n-(n+1)n(n-1)]/3
中间项都可以消去
=(n+2)(n+1)n/3


求出来了,然后代入求解就可以了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod = 1e9+7;
ll qmul ( ll a, ll b ){ll ans=0;while(b){if(b&1){ans=(ans+a)%mod;}a=(a+a)%mod;b>>=1;}return ans;
}
ll qpow ( ll a, ll b ){ll ans=1;a=a%mod;while(b){if(b&1){ans=qmul(ans,a);}a=qmul(a,a);b>>=1;}return ans%mod;
}
ll C(ll n,ll m){if(m>n) return 0;ll ans=1;for (ll i=1;i<=m;i++){ll a=(n+i-m)%mod;ll b=i%mod;ans=ans*(a*qpow(b,mod-2)%mod)%mod;}return ans;
}
ll Lucas (ll n,ll m){if ( m==0 ) return 1;return C(n%mod,m%mod)*Lucas(n/mod,m/mod)%mod;}
ll solve(ll n){ll ans=0;ans=qpow(n,3);ans=(ans+3*qpow(n,2)%mod)%mod;ans=(ans+2*n%mod)%mod;ans=ans*qpow(6,mod-2)%mod;return ans;
}
int main()
{ll n;scanf("%lld",&n);printf("%lld\n",solve(n));return 0;
}

【规律】Hzy's Rabbit Play相关推荐

  1. 【拓扑排序+dp】Hzy's Rabbit Candy

    Hzy's Rabbit Candy 题目描述 Hzy和她的m只兔兔在一个n个点m条边的有向无环图上玩. 为了让兔兔们开心,Hzy带了一些糖.Hzy可以从任何一个点开始,走到任何一个点结束.在这途中, ...

  2. 【思维】Hzy's Rabbit Stick

    题目描述 给兔兔们染完颜色后,Hzy把n只颜色不同的兔兔放在了一根长度为L=10n的木棍的不同位置(每只兔兔的位置在[0,L]之间)上,让她们做做运动. 在最开始的时候,Hzy会给每只兔兔指定一个方向 ...

  3. Virtual host / experienced an error on node rabbit@wohu-rabbit and may be inaccessible

    RabbitMQ 如下错误: Virtual host / experienced an error on node rabbit@wohu-rabbit and may be inaccessibl ...

  4. java程序a-z b-y_有一行电文,以按下面规律译成密码: A---Z a---z B---Y b---Y C---X c---x …… 即第1个字母编程第26个字...

    有一行电文,以按下面规律译成密码: A--->Z a--->z B--->Y b--->Y C--->X c--->x -- 即第1个字母编程第26个字母,第i个字 ...

  5. HDU 6229 Wandering Robots 找规律+离散化

    题目链接:Wandering Robots 题解:先讲一下规律,对于每一个格子它可以从多少个地方来有一个值(可以从自己到自己),然后答案就是统计合法格子上的数与所有格子的数的比值 比如说样例的3 0格 ...

  6. DllMain中不当操作导致死锁问题的分析--进程对DllMain函数的调用规律的研究和分析

    不知道大家是否思考过一个过程:系统试图运行我们写的程序,它是怎么知道程序起始位置的?很多同学想到,我们在编写程序时有个函数,类似Main这样的名字.是的!这就是系统给我们提供的控制程序最开始的地方(注 ...

  7. UVA 1482 - Playing With Stones(SG打表规律)

    UVA 1482 - Playing With Stones 题目链接 题意:给定n堆石头,每次选一堆取至少一个.不超过一半的石子,最后不能取的输,问是否先手必胜 思路:数值非常大.无法直接递推sg函 ...

  8. 2018.09.01 poj3071Football(概率dp+二进制找规律)

    传送门 概率dp简单题. 设f[i][j]表示前i轮j获胜的概率. 如果j,k能够刚好在第i轮相遇,找规律可以发现j,k满足: (j−1)>>(i−1)(j−1)>>(i−1) ...

  9. 2016 多校赛3 A 水 B 期望,规律 C 各种博弈 J 物理题,积分 K 暴力,水

    2016 Multi-University Training Contest 3 A - Sqrt Bo 题意:给一个数 n,问n要多少次平方后化为1,如果超过5次输出"TAT". ...

最新文章

  1. 五个角度解释深度学习中 Batch Normalization为什么效果好?
  2. springboot整合oracle_SpringBoot2.x系列教程67--Spring Boot整合分布式事务简介
  3. velocity模板引擎 -- java.io.FileNotFoundException: velocity.log (Permission denied)
  4. switch_to及ret_from_sys_call控制任务的切换与返回
  5. mysql(1):查找语句练习
  6. mysql跟memcache的区别_MySQL-mysql Memory Storage Engine 和memcache到底有何不同?各自的优缺点是什么?...
  7. android 知识点大全,Android基础知识总结(一)
  8. 一步一步写STL:空间配置器(1)
  9. EOJ Monthly 2019.2 E 中位数 (二分+中位数+dag上dp)
  10. 菜鸟学习笔记:Java提升篇3(容器3——泛型、排序)
  11. 使用XLocalizer进行ASP.NET Core本地化
  12. DVD-Cloner 2021 for mac(DVD光盘刻录工具)
  13. Hive启动报错: Found class jline.Terminal, but interfac
  14. 【Python】发送UDP数据(保姆级图文+附测试工具文件+api例程)
  15. yarn的安装和使用(全网最详细)
  16. 浪潮服务器支持pcie ssd硬盘吗,PCI-E与SATA SSD如何选?一分钟看懂
  17. 麓言科技设计师你要有想法
  18. python画红色填充三角形_用单独的颜色填充Matplotlib三元组中的三角形
  19. 【笔记】编译原理——第三章 词法分析
  20. 【经验分享】58个硬件工程师基础知识面试题

热门文章

  1. 苹果计算机快捷键设置,那些你必须熟悉苹果电脑的快捷键,你知道吗?
  2. 我们不再需要3Q大战
  3. PAT 1009 蜜蜂寻路
  4. (29)Verilog实现倍频【方法二】
  5. 数据库常见的安全问题有哪些?
  6. 2017年1月15日 星期日 --出埃及记 Exodus 22:5
  7. hdu 1116 并查集和欧拉路径
  8. ORA-3136报错
  9. 扑克牌java发牌_Java练习——扑克牌发牌器
  10. adprw指令教程_三菱FX3U从入门到精通(全套)