题解—工业题
只能说还是我太菜了。
昨天就没取模,今天还没涨教训。
自己不看数据范围,炸了怪谁。
\(\Huge{一定要记住,在取模的时候大于模数的都要取!!!}\)
这个规律还是不难推的,就是我考场上比较傻,一会想打表找规律,一会又坚信自己可以做出来,浪废了很多时间。
首先很好推的就是上走一步会乘\(b\),右走一步会乘\(a\)。
然后就是系数的问题。
画出来找依照规律,发现就是到达那个地方的方案数。
所以直接组合数学就行了。
时间复杂度\(O(n+m)\)
注意,由于我们需要\(n+m\)的组合数,所以数组一定要开够,二倍!!!
#include <cstdio>
#include <cstring>
#include <algorithm>
#define R register int
#define int long long
#define printf Ruusupuu = printf
#define scanf Ruusupuu = scanf
#define freopen rsp_5u = freopen
int Ruusupuu ;
FILE * rsp_5u ;
using namespace std ;
typedef long long L ;
typedef long double D ;
typedef pair<int , int> PI ;
const int N = 6e5 + 10 ;
const int M = 998244353 ;
inline void of(){ freopen( "a_sample2.in" , "r" , stdin ) , freopen( "a.out" , "w" , stdout ) ; }
inline void cf(){ fclose( stdin ) , fclose( stdout ) ; }
inline void J( int & a , int b ){ a = ( a + b ) % M ; }
inline int read(){
int w = 0 ; bool fg = 0 ; char ch = getchar() ;
while( ch < '0' || ch > '9' ) fg |= ( ch == '-' ) , ch = getchar() ;
while( ch >= '0' && ch <= '9' ) w = ( w << 1 ) + ( w << 3 ) + ( ch - '0' ) , ch = getchar() ;
return fg ? -w : w ;
}
int n , m , a , b , x [N] , y [N] , js [N] , inv [N] , ins [N] , ans , powa [N] , powb [N] ;
void sc(){
n = read() , m = read() , a = read() % M , b = read() % M ;
for( R i = 1 ; i <= n ; i ++ ) x [i] = read() % M ;
for( R i = 1 ; i <= m ; i ++ ) y [i] = read() % M ;
js [0] = inv [0] = inv [1] = ins [0] = ins [1] = powa [0] = powb [0] = 1 ;
for( R i = 1 ; i < N ; i ++ ) js [i] = ( 1ll * js [i - 1] * i ) % M ;
for( R i = 2 ; i < N ; i ++ ) inv [i] = ( 1ll * ( M - M / i ) * inv [M % i] ) % M ;
for( R i = 2 ; i < N ; i ++ ) ins [i] = ( 1ll * ins [i - 1] * inv [i] ) % M ;
for( R i = 1 ; i < N ; i ++ ) powa [i] = ( 1ll * powa [i - 1] * a ) % M ;
for( R i = 1 ; i < N ; i ++ ) powb [i] = ( 1ll * powb [i - 1] * b ) % M ;
}
inline int C( int n , int m ){ return ( 1ll * ( 1ll * js [n] * ins [m] ) % M * ins [n - m] ) % M ; }
void work(){
for( R i = 1 ; i <= n ; i ++ ) J( ans , ( ( x [i] * C( n + m - i - 1 , m - 1 ) % M ) * ( ( powa [m] * powb [n - i] ) % M ) ) % M ) ;
for( R i = 1 ; i <= m ; i ++ ) J( ans , ( ( y [i] * C( n + m - i - 1 , n - 1 ) % M ) * ( ( powa [m - i] * powb [n] ) % M ) ) % M ) ;
printf( "%lld\n" , ans ) ;
}
signed main(){
// of() ;
sc() ;
work() ;
// cf() ;
return 0 ;
}
$The \ light \ has \ betrayed \ me$

浙公网安备 33010602011771号