P1762 偶数&杨辉三角
P1762 偶数&杨辉三角(天立OI)
解题思路
一.结论法
杨辉三角形结论
-
第行有个数。
-
每行奇数个数必为(不是行数)
-
当行数恰为时,奇数个数为个,无偶数。
-
当行数恰为时,其前行有个奇数。
-
前行奇数个数():
-
前行偶数个数
二.分析法
既然看不出来,那就打表():
1 1
2 1 1
3 1 0 1
4 1 1 1 1
5 1 0 0 0 1
6 1 1 0 0 1 1
7 1 0 1 0 1 0 1
8 1 1 1 1 1 1 1 1 *****
9 1 0 0 0 0 0 0 0 1
10 1 1 0 0 0 0 0 0 1 1
11 1 0 1 0 0 0 0 0 1 0 1
12 1 1 1 1 0 0 0 0 1 1 1 1 *****
13 1 0 0 0 1 0 0 0 1 0 0 0 1
14 1 1 0 0 1 1 0 0 1 1 0 0 1 1
15 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
这个就有规律了:
-
当时,前面一共有个
-
当时,可以将拆成
但这个又有什么用呢?不妨举个例子:
可以发现方法一里面的规律:
综上,下次遇见关于杨辉三角的题先打表!!
CODE
#include<bits/stdc++.h>
#define ll __int128
using namespace std;
const ll maxn = 300;
ll int_maxn=1e9;
ll ll_maxn=1e18;
inline ll read_int(){
ll a=0,f=0,g=getchar();
while(g<'0'||g>'9'){if(g=='-') f=1;g=getchar();}
while('0'<=g&&g<='9') a=a*10+g-'0',g=getchar();
return f ? -a : a;
}
inline void write(ll s,bool f){
ll top=0,a[40];
if(s<0) s=-s,putchar('-');
while(s) a[++top]=s%10,s/=10;
if(top==0) a[++top]=0;
while(top) putchar(a[top]+'0'),top--;
if(f) putchar('\n');
}
ll n;
ll top=0,jz[10000],mod=1000003;
inline void er(){
ll m=n;
for(ll i=0;m;i++){
if(m&1) jz[++top]=i;
m>>=1;
}
}
inline ll qpow(ll n,ll c){
ll ans=1;
while(c){
if(c&1) ans=ans*n%mod;
n=n*n%mod,c>>=1;
}
return ans;
}
inline void read(){
n=read_int();
er();
ll a=1;
ll ans=0;
for(ll i=top;i>=1;i--){
ans=ans+a*qpow(3,jz[i])%mod;
a=a*2%mod;
ans%=mod;
}
ll L=(n+1)%2 ? n/2%mod*(n+1)%mod : (n+1)/2%mod*(n)%mod;
ans=L-ans;
write(ans<0 ? ans+mod : ans,1);
}
int main (){
read();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效