NC251500. coin
描述
假如我那时握住的不是硬币,而是 ...
输入描述
第一行一个整数,表示询问组数。
接下来行,每行两个整数
表示一组询问。
输出描述
输出行,每行一个整数表示答案在模 998244353 意义下的值,可以证明答案在模意义下存在。
示例1
输入:
2 233 634336464 59093912 743410448
输出:
60595366 392543410
C++ 解法, 执行用时: 194ms, 内存消耗: 1296K, 提交时间: 2023-08-12 10:20:01
#include<iostream> #include<string> #include<algorithm> #include<queue> using namespace std; #define ll long long const int N=300005; const ll mod=998244353; ll qpow(ll a,ll b){ ll ans=1; if(b==0) return 1; if(b%2) ans=a; ll t=qpow(a,b/2); return t*t%mod*ans%mod; } ll inv(ll a){ return qpow(a,mod-2); } void solve(){ ll n,p; cin>>n>>p; ll q=(mod+1-p)%mod; ll s=p*inv(q)%mod; s=inv(s); if(s==1){ cout<<inv(2)<<'\n'; return; } ll ans=n*qpow(s,n)%mod*(s-1)%mod*inv(qpow(s,n+1)-1)%mod*inv(qpow(s,n)-1)%mod; ll ans2=inv(qpow(s,n+1)-1)%mod; ans=(ans-ans2+mod)%mod; cout<<ans; cout<<'\n'; } int main(){ ios::sync_with_stdio(false); cin.tie(0); int t0; cin>>t0; for(int t=0;t<t0;t++){ solve(); } }