【规律】Hzy's Rabbit Play
题目描述
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相关推荐
- 【拓扑排序+dp】Hzy's Rabbit Candy
Hzy's Rabbit Candy 题目描述 Hzy和她的m只兔兔在一个n个点m条边的有向无环图上玩. 为了让兔兔们开心,Hzy带了一些糖.Hzy可以从任何一个点开始,走到任何一个点结束.在这途中, ...
- 【思维】Hzy's Rabbit Stick
题目描述 给兔兔们染完颜色后,Hzy把n只颜色不同的兔兔放在了一根长度为L=10n的木棍的不同位置(每只兔兔的位置在[0,L]之间)上,让她们做做运动. 在最开始的时候,Hzy会给每只兔兔指定一个方向 ...
- 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 ...
- 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个字 ...
- HDU 6229 Wandering Robots 找规律+离散化
题目链接:Wandering Robots 题解:先讲一下规律,对于每一个格子它可以从多少个地方来有一个值(可以从自己到自己),然后答案就是统计合法格子上的数与所有格子的数的比值 比如说样例的3 0格 ...
- DllMain中不当操作导致死锁问题的分析--进程对DllMain函数的调用规律的研究和分析
不知道大家是否思考过一个过程:系统试图运行我们写的程序,它是怎么知道程序起始位置的?很多同学想到,我们在编写程序时有个函数,类似Main这样的名字.是的!这就是系统给我们提供的控制程序最开始的地方(注 ...
- UVA 1482 - Playing With Stones(SG打表规律)
UVA 1482 - Playing With Stones 题目链接 题意:给定n堆石头,每次选一堆取至少一个.不超过一半的石子,最后不能取的输,问是否先手必胜 思路:数值非常大.无法直接递推sg函 ...
- 2018.09.01 poj3071Football(概率dp+二进制找规律)
传送门 概率dp简单题. 设f[i][j]表示前i轮j获胜的概率. 如果j,k能够刚好在第i轮相遇,找规律可以发现j,k满足: (j−1)>>(i−1)(j−1)>>(i−1) ...
- 2016 多校赛3 A 水 B 期望,规律 C 各种博弈 J 物理题,积分 K 暴力,水
2016 Multi-University Training Contest 3 A - Sqrt Bo 题意:给一个数 n,问n要多少次平方后化为1,如果超过5次输出"TAT". ...
最新文章
- 五个角度解释深度学习中 Batch Normalization为什么效果好?
- springboot整合oracle_SpringBoot2.x系列教程67--Spring Boot整合分布式事务简介
- velocity模板引擎 -- java.io.FileNotFoundException: velocity.log (Permission denied)
- switch_to及ret_from_sys_call控制任务的切换与返回
- mysql(1):查找语句练习
- mysql跟memcache的区别_MySQL-mysql Memory Storage Engine 和memcache到底有何不同?各自的优缺点是什么?...
- android 知识点大全,Android基础知识总结(一)
- 一步一步写STL:空间配置器(1)
- EOJ Monthly 2019.2 E 中位数 (二分+中位数+dag上dp)
- 菜鸟学习笔记:Java提升篇3(容器3——泛型、排序)
- 使用XLocalizer进行ASP.NET Core本地化
- DVD-Cloner 2021 for mac(DVD光盘刻录工具)
- Hive启动报错: Found class jline.Terminal, but interfac
- 【Python】发送UDP数据(保姆级图文+附测试工具文件+api例程)
- yarn的安装和使用(全网最详细)
- 浪潮服务器支持pcie ssd硬盘吗,PCI-E与SATA SSD如何选?一分钟看懂
- 麓言科技设计师你要有想法
- python画红色填充三角形_用单独的颜色填充Matplotlib三元组中的三角形
- 【笔记】编译原理——第三章 词法分析
- 【经验分享】58个硬件工程师基础知识面试题