2.【题解】BZOJ 4403序列统计
tg.BZOJ 4403序列统计
pj.BZOJ 4403序列统计
没啥用的题解
——无脑思考
- 首先要想怎么求单调不上升序列的个数,因为可能会有重复的数,所以不能直接用排列组合。
- 那这道题怎么打呀?
我不知道啊
- 因为原来是单调不下降序列,将第
位上的数加 ,于是变成单调上升序列。于是 变成 , 变成 ,于是就要求出 - 因为
- 所以
- 所以
- 最后得出
- 所以在第一个地方加上一个
,于是与第一个合并成为 。同理,最后合并成 。 - 所以
就是每个输入的解。
容易死的地方
时,要输出 。- 记得加上模数,防止出来负数。
代码
#include<bits/stdc++.h> #define ls (p<<1) #define rs (p<<1|1) #define endl '\n' #define N (10000010) #define int long long using namespace std; namespace IO { #define ll long long const int MAX=1<<25; char buf[MAX],*p1=buf,*p2=buf; char obuf[MAX],*o=obuf; #define gc()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) //template<typename T> //inline T read() inline int read() { int x=0;bool f=1; char c=gc(); for(;c<48||c>57;c=gc())if(c=='-')f=0; for(;c>=48&&c<=57;c=gc())x=(x<<3)+(x<<1)+(c^48); return f?x:~x+1; } void print(ll x){if(x>9)print(x/10);*o++=(x%10)+'0';} void pit(ll x){if(x<0)*o++='-',x=~x+1;print(x);} void write(ll x,char end){pit(x);*o++=end;} void flush(){fwrite(obuf,o-obuf,1,stdout);} #undef ll } using IO::read;using IO::write;using IO::flush; int n,m,t,P; int x,y,k,L,R,tot,lon; int len,prime[700010];//,phi[N];//线性筛欧拉函数 bitset<N>vis; long long inv[N];//乘法逆元 inline int max(int x,int y){return x>y?x:y;} inline int min(int x,int y){return x<y?x:y;} inline void swap(int &x,int &y){int tmp=x;x=y;y=tmp;} int e[N],siz[N]; long long qpow(long long x,int b,int P=P) { long long ans=1; for(;b;b>>=1){if(b&1)ans=(ans*x)%P;x=(x*x)%P;} return ans; }//O(log(b)) int exgcd(int a,int b,int &x,int &y) { if(!b){x=1,y=0;return a;} int d=exgcd(b,a%b,y,x); y-=(a/b*x); return d; }//O(max(a,b)) int ola(int n) { int ans=n; for(int i=2;i*i<=n;++i) { if(n%i==0)ans=ans/i*(i-1); for(;n%i==0;n/=i); } if(n>1)ans=ans/n*(n-1); return ans; }//O(sqrt(n)) void eular(int n)//欧拉筛 { //memset(vis,0,sizeof(vis)); //phi[1]=1; for(int i(2);i<=n;++i) { if(!vis[i]) prime[++len]=i;//,phi[i]=(i-1); for(int j(1);j<=len&&i*prime[j]<=n;++j) { vis[i*prime[j]]=1; /* if(!(i%prime[j])) {phi[i*prime[j]]=(phi[i]*prime[j]);break;} else phi[i*prime[j]]=(phi[i]*(prime[j]-1)); */ } } }//O(n) void niyuan1(int n)//乘法逆元 { inv[1]=1; for(int i(2);i<=n;++i)inv[i]=((P-P/i)*inv[P%i])%P; }//O(n) int inv_it(int a)//O(log(a)) { int d(exgcd(a,P,x,y)); return (x%P+P)%P; } int C(int n,int m,int P=P) {return (m>n)?0:(e[n]*qpow((e[m]*e[n-m])%P,P-2))%P;} int lucas(int n,int m,int P=P) {return (!m)?1:(C(n%P,m%P)*lucas(n/P,m/P))%P;} void init() { P=(1e6)+3;e[1]=1; for(int i(2);i<=(1e6)+4;++i)e[i]=(e[i-1]*i)%P; } signed main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif init(); for(t=read();t;--t) { n=read(),L=read(),R=read(); if(!n){write(0,'\n');continue;} lon=R-L+1; write((lucas(lon+n,lon)-1+P)%P,'\n'); } flush(); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】