《瞿葩的数字游戏》T3-三角圣地(Lucas)
题目背景
国王1带大家到了数字王国的中心:三角圣地。
题目描述
不是说三角形是最稳定的图形嘛,数字王国的中心便是由一个倒三角构成。这个倒三角的顶端有一排数字,分别是1~N。1~N可以交换位置。之后的每一行的数字都是上一行相邻两个数字相加得到的。这样下来,最底端就是一个比较大的数字啦!数字王国称这个数字为“基”。国王1希望“基”越大越好,可是每次都自己去做加法太繁琐了,他希望你能帮他通过编程计算出这个数的最大值。但是这个值可能很大,所以请你输出它mod 10007 的结果。
任务:给定N,求三角形1~N的基的最大值 再去 mod 10007。
输入输出格式
输入格式:
一个整数N
输出格式:
一个整数,表示1~N构成的三角形的最大的“基”
思路:
其实这道题大家画个图就会发现,1~n个数在他们自己位置上的权值是杨辉三角形第n行
由于可以交换位置,所以将最大的放在中间即可
于是开始算了
一开始,我用的递推组合数直接求一行杨辉三角形
50分??
哦,1000000太大了,递推会出锅
好吧,Lucas来一发
还是50分??
好吧,TLE出锅了
怎么办呢?
看来只能预处理阶乘了。。。
心累。。
递推版:
#include<iostream>
#include<cstdio>
using namespace std;
long long n,m,p,t,ans[1000010],ny[1000010],out;
void qny()
{ny[1]=1;for(register int a=2;a<=n;a++){ny[a]=(p-(p/a))*ny[p%a]%p;}
}
int main()
{scanf("%d",&n);p=10007;qny();m=(n+1)/2;ans[0]=1;for(register int i=1;i<=m-1;i++){ans[i]=ans[i-1]*(n-i)*ny[i]%p;}for(register int i=2;i<=n;i+=2){long long ltt=i+i-1;ltt%=p;ltt*=ans[i/2-1];ltt%=p;out+=ltt;out%=p;}if(n%2==1){long long ltt=n*ans[m-1]%p;out+=ltt;out%=p;}cout<<out;
}
Lucas朴素版:
// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#define rii register int i
using namespace std;
unsigned long long n,m,p,t,ny[100010],out;
void qny()
{ny[1]=1;for(register int a=2;a<=p;a++){ny[a]=(p-(p/a))*ny[p%a]%p;}
}
int zhs(int q,int x)
{if(q==0){return 1;}long long ltt=1;for(register int a=1;a<=q;a++){ltt*=ny[a];ltt%=p;}for(register int a=1;a<=q;a++){ltt*=(x-a+1);ltt%=p;}return ltt;
}
long long lucas(int s,int t)
{if(t==0){return 1;}else{return (lucas(s/p,t/p)*zhs(s%p,t%p))%p;}
}
int main()
{scanf("%d",&n);p=10007;qny();for(rii=1;i<=n;i+=2){if(i==n){out+=lucas(i/2,n-1)*(i);}else{out+=lucas(i/2,n-1)*(i*2+1);}out%=p;}cout<<out;
}
正解:
#include<iostream>
#include<cstring>
#define rii register int i
using namespace std;
int p=10007;
long long jc[10010],ny[10010],n,ans;
void ycl()
{ jc[0]=1;jc[1]=1;ny[0]=1;ny[1]=1; for(rii=2;i<=p-1;i++){jc[i]=jc[i-1]*i%p;}for(rii=2;i<=p-1;i++){ny[i]=(p-p/i)*ny[p%i]%p; }for(rii=1;i<=p-1;i++){ny[i]=ny[i-1]*ny[i]%p;}
}
long long lucas(long long h,long long j)
{ if(h<j){return 0;}if(h<p&&j<p){return jc[h]*ny[j]%p*ny[h-j]%p; } return lucas(h/p,j/p)*lucas(h%p,j%p)%p;
}
int main()
{ ycl();cin>>n;for(rii=1;i<=n;i++){if(i%2==0){ans=(ans+(i*lucas(n-1,n-i/2))%p)%p;if(ans<0){ans+=p;}}else{ans=(ans+(lucas(n-1,(i+1)/2-1)*i)%p)%p;if(ans<0){ans+=p;}}}cout<<ans;
}
转载于:https://www.cnblogs.com/ztz11/p/9209182.html
《瞿葩的数字游戏》T3-三角圣地(Lucas)相关推荐
- [洛谷2674]瞿葩的数字游戏-多边形数 题解
前言 原题题目<瞿葩的数字游戏>T2-多边形数. 因为博客园标题不能太长所以压缩了一下. 题解 这道题目我是按表格中的列来考虑的, 设读入的数字为\(x\),考虑上面的表格. 我们发现如果 ...
- 【刷题】洛谷 P2675 《瞿葩的数字游戏》T3-三角圣地
题目背景 国王1带大家到了数字王国的中心:三角圣地. 题目描述 不是说三角形是最稳定的图形嘛,数字王国的中心便是由一个倒三角构成.这个倒三角的顶端有一排数字,分别是1 ~ N.1 ~ N可以交换位置. ...
- 【luoguP2675】《瞿葩的数字游戏》T3-三角圣地
题目背景 国王1带大家到了数字王国的中心:三角圣地. 题目描述 不是说三角形是最稳定的图形嘛,数字王国的中心便是由一个倒三角构成.这个倒三角的顶端有一排数字,分别是1~N.1~N可以交换位置.之后的每 ...
- 洛谷P2675 《瞿葩的数字游戏》T3-三角圣地
题目背景 国王1带大家到了数字王国的中心:三角圣地. 题目描述 不是说三角形是最稳定的图形嘛,数字王国的中心便是由一个倒三角构成.这个倒三角的顶端有一排数字,分别是1~N.1~N可以交换位置.之后的每 ...
- 《瞿葩的数字游戏》T3-三角圣地
题目描述: 雾 题目分析: 观察发现越大的数排在中间位置对答案越有利,所以就可以贪心了 1 3 4 2 那么第一个位置1对答案贡献1次 第二个位置3对答案贡献3次 第三个位置4对答案贡献3次 第四个位 ...
- Luogu P2675 《瞿葩的数字游戏》T3-三角圣地
题目链接:传送门 显然 越大的数越靠中间最后的结果越大 那就看每个数能被加多少次 算上几个就看得出来 是按杨辉三角给贡献的 统计答案时就用那个数i乘以它被算的次数 注意大的在中间,组合数别写错 #in ...
- P2675 《瞿葩的数字游戏》T3-三角圣地
传送门 考虑最上面每个位置的数对答案的贡献 然后就很容易发现: 如果有n层,位置 i 的数对答案的贡献就是C( n-1,i ) 然后就有很显然的贪心做法: 越大的数放越中间,这样它的贡献就会尽可能的大 ...
- 《瞿葩的数字游戏》T3-三角圣地,洛谷P2675,Lucas定理
正题 看到这题就会想到杨辉三角形. 一个很明显的性质就是杨辉三角形中同一行内中间大两边小,所以我们尽量让中间大的数乘上中大的数,贪心就可以了. 发现mod数很小,所以处理逆元和阶乘的时候会有0的出现. ...
- 题解 P2674 【《瞿葩的数字游戏》T2-多边形数】
题目说了很清楚,此题找规律,那么就找规律. 我们观察数列. 令k表示数列的第k个数. 三角形数:1 3 6 10 15 两项相减:1 2 3 4 5 再次相减:1 1 1 1 1 四边形数:1 4 9 ...
最新文章
- 基于 OpenCV 的网络实时视频流传输
- 依图颜水成:AI芯片设计要深度融合算法,才能实现极致性能
- 深入浅出mfc学习笔记——六大关键技术之仿真_运行时和动态创建
- P1305 新二叉树
- 扩散(信息学奥赛一本通-T1437)
- 携号转网,用户最关心的还是网络质量
- Caffe100数据集使用
- 引用类型和值类型学习笔记
- 2017 4月20日下午
- 北漂程序员,何以露宿街头?
- 【Latex】Latex小论文模板
- java简易计算器报告_简易计算器java实训报告.docx
- 卡农c语言编程,c调卡农钢琴曲谱_卡农C大调钢琴谱(五线谱)
- 短视频的地方搞笑配音怎么做?分享一个小技巧,不会方言也能配
- spring文件上传拦截器及异常处理
- golang 读取Response Body 超时问题
- 08_EMS项目之需求分析与界面搭建
- 企业微信接收信息服务器全代码,微信企业号的消息和事件的接收处理及解密
- android机器人飞机游戏,机器人飞行模拟器
- 看国外如何设计城市街道保障行人和自行车交通安全?