We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
inline vlong modInv ( vlong a, vlong m ) {
vlong x, y;
ext_gcd( a, m, &x, &y );
if ( x < 0 ) x += m; //modInv is never negative
return x;
}
inline vlong power ( vlong a, vlong p ) {
vlong res = 1, x = a;
while ( p ) {
if ( p & 1 ) res = ( res * x );
x = ( x * x ); p >>= 1;
}
return res;
}
inline vlong bigmod ( vlong a, vlong p, vlong m ) {
vlong res = 1 % m, x = a % m;
while ( p ) {
if ( p & 1 ) res = ( res * x ) % m;
x = ( x * x ) % m; p >>= 1;
}
return res;
}
/*********Template Ends Here*********/
vlong fact[201000], inv[201000], two[200010];
int mod = 1000000007;
void precal() {
fact[0] = 1;
inv[0] = modInv( 1, mod );
two[0] = modInv( 1, mod );
int temp = modInv( 2, mod );
FOR(i,1,200010) {
fact[i] = ( fact[i-1] * i ) % mod;
inv[i] = modInv( fact[i], mod );
two[i] = ( two[i-1] * temp ) % mod;
}
}
int main () {
precal();
int kase;
scanf ( "%d", &kase );
assert ( kase > 0 && kase <= 100000 );
while ( kase-- ) {
int m, a;
scanf ( "%d %d", &m, &a );
assert ( m >= 1 && m <= 100000 && a >= 0 && a <= 100000 );
vlong res = ( fact[a+m+1] * inv[a+2] ) % mod;
res = ( res * res ) % mod;
res = ( res * ( ( (a+2) * (a+m+2) ) % mod ) ) % mod;
res = ( res * two[m] ) % mod;
printf ( "%lld\n", res );
}
return 0;
}
Cookie support is required to access HackerRank
Seems like cookies are disabled on this browser, please enable them to open this website
Divisor Exploration
You are viewing a single comment's thread. Return to all comments →
include
define pb push_back
define nl puts ("")
define sp printf ( " " )
define phl printf ( "hello\n" )
define ff first
define ss second
define POPCOUNT __builtin_popcountll
define RIGHTMOST __builtin_ctzll
define LEFTMOST(x) (63-__builtin_clzll((x)))
define MP make_pair
define FOR(i,x,y) for(vlong i = (x) ; i <= (y) ; ++i)
define ROF(i,x,y) for(vlong i = (y) ; i >= (x) ; --i)
define CLR(x,y) memset(x,y,sizeof(x))
define UNIQUE(V) (V).erase(unique((V).begin(),(V).end()),(V).end())
define MIN(a,b) ((a)<(b)?(a):(b))
define MAX(a,b) ((a)>(b)?(a):(b))
define NUMDIGIT(x,y) (((vlong)(log10((x))/log10((y))))+1)
define SQ(x) ((x)*(x))
define ABS(x) ((x)<0?-(x):(x))
define FABS(x) ((x)+eps<0?-(x):(x))
define ALL(x) (x).begin(),(x).end()
define LCM(x,y) (((x)/gcd((x),(y)))*(y))
define SZ(x) ((vlong)(x).size())
define NORM(x) if(x>=mod)x-=mod;
using namespace std;
typedef long long vlong; typedef unsigned long long uvlong; typedef pair < int, int > pii; typedef pair < vlong, vlong > pll; typedef vector vii; typedef vector vi;
const vlong inf = 2147383647; const double pi = 2 * acos ( 0.0 ); const double eps = 1e-9;
ifdef forthright48
else
endif
struct debugger{ template debugger& operator , (const T& v){ cerr<
//int knightDir[8][2] = { {-2,1},{-1,2},{1,2},{2,1},{2,-1},{-1,-2},{1,-2},{-2,-1} }; //int dir4[4][2] = {{-1,0},{0,1},{1,0},{0,-1}};
inline vlong gcd ( vlong a, vlong b ) { a = ABS ( a ); b = ABS ( b ); while ( b ) { a = a % b; swap ( a, b ); } return a; }
vlong ext_gcd ( vlong A, vlong B, vlong *X, vlong *Y ){ vlong x2, y2, x1, y1, x, y, r2, r1, q, r; x2 = 1; y2 = 0; x1 = 0; y1 = 1; for (r2 = A, r1 = B; r1 != 0; r2 = r1, r1 = r, x2 = x1, y2 = y1, x1 = x, y1 = y ) { q = r2 / r1; r = r2 % r1; x = x2 - (q * x1); y = y2 - (q * y1); } *X = x2; *Y = y2; return r2; }
inline vlong modInv ( vlong a, vlong m ) { vlong x, y; ext_gcd( a, m, &x, &y ); if ( x < 0 ) x += m; //modInv is never negative return x; }
inline vlong power ( vlong a, vlong p ) { vlong res = 1, x = a; while ( p ) { if ( p & 1 ) res = ( res * x ); x = ( x * x ); p >>= 1; } return res; }
inline vlong bigmod ( vlong a, vlong p, vlong m ) { vlong res = 1 % m, x = a % m; while ( p ) { if ( p & 1 ) res = ( res * x ) % m; x = ( x * x ) % m; p >>= 1; } return res; }
/*********Template Ends Here*********/ vlong fact[201000], inv[201000], two[200010]; int mod = 1000000007; void precal() { fact[0] = 1; inv[0] = modInv( 1, mod );
}
int main () { precal();
}