Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
29773 liuyile 【BJ】T1 C++ 通过 100 161 MS 352 KB 1576 2024-05-26 20:24:00

Tests(10/10):


#include <bits/stdc++.h> using namespace std; #define int long long #define double long double #define lc(x) (x<<1) #define rc(x) (x<<1|1) int n,m,s,t; const int M=1e9+7; inline int qp(int a,int x){ int res=1; while(x){ if(x&1)res=res*a%M; a=a*a%M; x>>=1; } return res; } inline int inv(int x){return qp(x,M-2);} inline void add(int &x,int y){x+=y;x-=(x>=M?M:0);} int B[2010],A[2010]; int C[2010]; inline void self_conv(){ memset(B,0,sizeof(B)); for(int i=0;i<=m-n+1;i++) for(int j=0;j<=m-n+1-i;j++) add(B[i+j],A[i]*A[j]%M); memcpy(A,B,sizeof(A)); } inline void conv(){ memset(B,0,sizeof(B)); for(int i=0;i<=m-n+1;i++) for(int j=0;j<=m-n+1-i;j++) add(B[i+j],A[i]*C[j]%M); memcpy(C,B,sizeof(C)); } inline void QP(int x){ memset(C,0,sizeof(C)); C[0]=1; while(x){ if(x&1)conv(); self_conv(); x>>=1; } } int P[2010],Q[2010]; signed main() { // freopen("success.in","r",stdin); // freopen("success.out","w",stdout); ios::sync_with_stdio(0); cin>>s>>t>>n>>m; memset(A,0,sizeof(A)); A[0]=A[1]=1; QP(s-n*t); memcpy(P,C,sizeof(P)); memset(A,0,sizeof(A)); A[0]=A[1]=1; QP(t); // cout<<A[0]<<" "<<A[1]<<" "<<A[2]<<endl; // cout<<C[0]<<" "<<C[1]<<" "<<C[2]<<endl; memcpy(A,C,sizeof(C)); for(int i=0;i<=m-n;i++) A[i]=A[i+1]; // cout<<A[0]<<" "<<A[1]<<endl; QP(n); memcpy(Q,C,sizeof(Q)); int res=0; for(int i=0;i<=m-n;i++) add(res,P[i]*Q[m-n-i]%M); // cout<<P[i]<<" "<<Q[i]<<endl; cout<<res<<endl; cout.flush(); return 0; } /* */


测评信息: