【JZOJ4800】周末晚会 题解
来源:互联网 发布:ubuntu安装时合并分区 编辑:程序博客网 时间:2024/05/20 12:48
题目大意
【20%】n,k<=20
【100%】n,k<=2000
代码
//这里我的 f 是从 0 开始的,所以 f[i] 的长度实际上是 i+1
#include<cstdio>#define fo(i,a,b) for(int i=a;i<=b;i++)using namespace std;typedef long long LL;const int maxn=2005;const LL mo=1e8+7;int n,k;LL f[maxn],s[maxn][maxn],sx[maxn][maxn];void pre(int n){ fo(k,1,n) { f[0]=1; LL t=1; fo(i,1,n) { f[i]=t; t=(t+f[i])%mo; if (i>k) t=(t-f[i-k-1]+mo)%mo; } s[k][0]=1; fo(i,1,n) { s[k][i]=(s[k][i-1]+f[i])%mo; sx[k][i]=(sx[k][i-1]+f[i]*i%mo)%mo; } }}int gcd(int a,int b) {return (b) ?gcd(b,a%b) :a ;}LL mi(LL x,LL y){ LL re=1; for(; y; y>>=1, x=x*x%mo) if (y&1) re=re*x%mo; return re;}int T;int main(){ pre(2000); scanf("%d",&T); while (T--) { scanf("%d %d",&n,&k); if (n==0 || k==0) {printf("0\n"); continue;} LL ans=0; fo(i,0,n-1) { LL d=gcd(n,i); ans=(ans+s[k][d-1]*d%mo-sx[k][d-1]+mo)%mo; if (d-k-2>=0) ans=(ans-s[k][d-k-2]*d%mo+sx[k][d-k-2]+mo)%mo; if (k>=n) ans=(ans+1)%mo; } ans=ans*mi(n,mo-2)%mo; printf("%lld\n",ans); }}
- 【JZOJ4800】周末晚会 题解
- [JZOJ4800]周末晚会
- JZOJ4800. 周末晚会
- JZOJ4800. 【GDOI2017模拟9.24】周末晚会
- 周末晚会
- BZOJ1547 周末晚会
- bzoj1547: 周末晚会
- 【GDOI2017模拟9.24】周末晚会
- 篝火晚会 题解
- 化装晚会(costume)暴力题解
- Hali-Bula的晚会(UVa1220)详细题解
- 周末
- 周末!
- 周末
- 周末~~~~
- 周末
- 周末
- 周末
- Strategy 策略模式 在 Spring 开发中的应用 包括事务管理,日志管理(logger),IoC容器根据bean定义的内容实例化等
- Hibernate基础知识(一)
- 你好,世界!
- javaBean之简介、设计原理、动作元素
- caffe中使用crop_size剪裁训练图片
- 【JZOJ4800】周末晚会 题解
- C语言中关于float、double、long double精度及数值范围理解
- UiAutomator UiWatcher
- MiniProfiler执行SQL语句
- 常见的原生javascript事件处理与浏览器兼容问题(上)
- 【备忘】【No3】小码哥11期2016年6月份毕业班的最新IOS视频教程
- QT学习 信号与槽
- Objective-C: UIKit: UIScrollView、欢迎界面
- The Blocks Problem