【刷题】洛谷 P2675 《瞿葩的数字游戏》T3-三角圣地
题目背景
国王1带大家到了数字王国的中心:三角圣地。
题目描述
不是说三角形是最稳定的图形嘛,数字王国的中心便是由一个倒三角构成。这个倒三角的顶端有一排数字,分别是1 ~ N。1 ~ N可以交换位置。之后的每一行的数字都是上一行相邻两个数字相加得到的。这样下来,最底端就是一个比较大的数字啦!数字王国称这个数字为“基”。国王1希望“基”越大越好,可是每次都自己去做加法太繁琐了,他希望你能帮他通过编程计算出这个数的最大值。但是这个值可能很大,所以请你输出它mod 10007 的结果。
任务:给定N,求三角形1~N的基的最大值 再去 mod 10007。
输入输出格式
输入格式:
一个整数N
输出格式:
一个整数,表示1~N构成的三角形的最大的“基”
输入输出样例
输入样例#1:
4
输出样例#1:
24
输入样例#2:
1125
输出样例#2:
700
说明
数据:
20% 0<=N<=100
50% 0<=N<=3000
100% 0<=N<=1000000
样例解释:
1 3 4 2
4 7 6
11 13
24 是N=4的时候的最大值,当然还有别的构成形式。
PS:它叫做三角圣地,其实它就是个三角形~
本题数据已经更新,目前全部正确无误!
不要面向数据编程!
题解
把三角形画出来之后,发现,数列里一个数在“基”被加的次数就是从它的位置走向底端的方案数
然后,\(ans=C_{n-1}^0a_0+C_{n-1}^1a_1+C_{n-1}^2a_2+...+C_{n-1}^{n-1}a_{n-1}=\sum_{i=0}^{n-1}C_{n-1}^ia_i\)
所以越往中间走,被加的次数就越多,那么贪心地把数列拍好,然后 \(O(n)\) 用Lucas算就好了
#include<bits/stdc++.h>
#define ui unsigned int
#define ll long long
#define db double
#define ld long double
#define ull unsigned long long
const int MAXN=1000000+10,Mod=1e4+7;
int n,A[MAXN];
ll res,fac[MAXN],inv[MAXN];
template<typename T> inline void read(T &x)
{
T data=0,w=1;
char ch=0;
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')w=-1,ch=getchar();
while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
x=data*w;
}
template<typename T> inline void write(T x,char ch='\0')
{
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
if(ch!='\0')putchar(ch);
}
template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
template<typename T> inline T min(T x,T y){return x<y?x:y;}
template<typename T> inline T max(T x,T y){return x>y?x:y;}
inline ll qexp(ll a,ll b)
{
ll res=1;
while(b)
{
if(b&1)res=res*a%Mod;
a=a*a%Mod;
b>>=1;
}
return res;
}
inline void init()
{
fac[0]=1;
for(register int i=1;i<Mod;++i)fac[i]=fac[i-1]*i%Mod;
inv[Mod-1]=qexp(fac[Mod-1],Mod-2);
for(register int i=Mod-2;i>=0;--i)inv[i]=inv[i+1]*(i+1)%Mod;
}
inline ll C(ll n,ll m)
{
if(n<m)return 0;
if(n<Mod&&m<Mod)return fac[n]*inv[m]%Mod*inv[n-m]%Mod;
else return C(n/Mod,m/Mod)*C(n%Mod,m%Mod)%Mod;
}
int main()
{
read(n);
init();
if(n&1)
{
A[(n>>1)+1]=n;A[(n>>1)+2]=n-1;
for(register int i=(n>>1);i>=1;--i)A[i]=A[i+1]-2;
for(register int i=(n>>1)+3;i<=n;++i)A[i]=A[i-1]-2;
}
else
{
A[1]=1;
for(register int i=2;i<=(n>>1);++i)A[i]=A[i-1]+2;
A[(n>>1)+1]=n;
for(register int i=(n>>1)+2;i<=n;++i)A[i]=A[i-1]-2;
}
for(register int i=1;i<=n;++i)(res+=C(n-1,i-1)*A[i]%Mod)%=Mod;
write(res,'\n');
return 0;
}
【刷题】洛谷 P2675 《瞿葩的数字游戏》T3-三角圣地的更多相关文章
- 洛谷 2953 [USACO09OPEN]牛的数字游戏Cow Digit Game
洛谷 2953 [USACO09OPEN]牛的数字游戏Cow Digit Game 题目描述 Bessie is playing a number game against Farmer John, ...
- LUOGU P2675 《瞿葩的数字游戏》T3-三角圣地
题面 解题思路 手推可以得出,最后每个数字的贡献其实就是第n行杨辉三角数,然后直接卢卡斯直接算(今天才找到lucas定理时间复杂度是log n,log以模数为底).代码略麻烦,不想改了. 代码 #in ...
- P2675 《瞿葩的数字游戏》T3-三角圣地
传送门 考虑最上面每个位置的数对答案的贡献 然后就很容易发现: 如果有n层,位置 i 的数对答案的贡献就是C( n-1,i ) 然后就有很显然的贪心做法: 越大的数放越中间,这样它的贡献就会尽可能的大 ...
- 题解 P2674 【《瞿葩的数字游戏》T2-多边形数】
题目说了很清楚,此题找规律,那么就找规律. 我们观察数列. 令k表示数列的第k个数. 三角形数:1 3 6 10 15 两项相减:1 2 3 4 5 再次相减:1 1 1 1 1 四边形数:1 4 9 ...
- 《瞿葩的数字游戏》T3-三角圣地(Lucas)
题目背景 国王1带大家到了数字王国的中心:三角圣地. 题目描述 不是说三角形是最稳定的图形嘛,数字王国的中心便是由一个倒三角构成.这个倒三角的顶端有一排数字,分别是1~N.1~N可以交换位置.之后的每 ...
- 【luoguP2675】《瞿葩的数字游戏》T3-三角圣地
题目背景 国王1带大家到了数字王国的中心:三角圣地. 题目描述 不是说三角形是最稳定的图形嘛,数字王国的中心便是由一个倒三角构成.这个倒三角的顶端有一排数字,分别是1~N.1~N可以交换位置.之后的每 ...
- 洛谷P 1427 小鱼的数字游戏
题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了).这对小鱼的 ...
- 【洛谷5月月赛】玩游戏(NTT,生成函数)
[洛谷5月月赛]玩游戏(NTT,生成函数) 题面 Luogu 题解 看一下要求的是什么东西 \((a_x+b_y)^i\)的期望.期望显然是所有答案和的平均数. 所以求出所有的答案就在乘一个逆元就好了 ...
- 2018.10.30 一题 洛谷4660/bzoj1168 [BalticOI 2008]手套——思路!问题转化与抽象!+单调栈
题目:https://www.luogu.org/problemnew/show/P4660 https://www.lydsy.com/JudgeOnline/problem.php?id=1168 ...
随机推荐
- 原生与JS交互 iOS
前言 Hybrid App(混合模式移动应用)是指介于web-app.native-app这两者之间的app,兼具“Native App良好用户交互体验的优势”和“Web App跨平台开发的优势” ...
- 基于OpenSSL的RSA加密应用(非算法)
基于OpenSSL的RSA加密应用(非算法) iOS开发中的小伙伴应该是经常用der和p12进行加密解密,而且在通常加密不止一种加密算法,还可以加点儿盐吧~本文章主要阐述的是在iOS中基于openSL ...
- python全栈开发-面向对象-初识2
python_17_day 今日主要内容: 1.类空间,对象空间,查询顺序. 2.组合. 1.类空间,对象空间,查询顺序. class Person: animal = '高级动物' soul = ' ...
- JavaFX学习笔记——ControlsFX控件集学习——ToggleSwitch和BreadCrumbBar例子
ToggleSwitch ToggleSwitch ts = new ToggleSwitch("开"); 效果 BreadCrumbBar BreadCrumbBar<St ...
- Nginx快速入门
本文主要介绍nginx的基本配置和操作,并介绍了一些可以完成的简单任务. 假设您已经学习过并已经安装好了nginx服务器. 如果没有,请参阅安装nginx页面(http://www.yiibai.co ...
- Dubbo使用心得2
- html js div随鼠标移动
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- SQL判断是否存在
判断数据库是否存在 ifexists(select*frommaster..sysdatabaseswherename=N’库名’) print’exists’ else print’notexist ...
- 17 Tips For Writing An Excellent Email Subject Line
Out of the billions of emails that are sent every day, how can you make sure that yours stands out? ...
- 选题博客:北航iCourse课程信息平台
1. 用户调查 在选题的时候,我们面向北航所有本科在读本科生,发布了<北航信息平台用户调查>.此次问卷调查共回收有效问卷95份. 1.1 功能需求调查 调查其中一项是让同学们对平台功能进行 ...