nqijij 有乙個數x,和乙個神秘權值 q, 滿足 x <= q, 每一次nqijij會隨機x 變成 [x, q] 中的乙個隨機數,nqijij想要知道期望多少次操作之後x 變為q。
由於nqijij 是乙個精力充沛的人,所以他總共會選擇 t 次x 和q 進行操作,對於每一次操作,你需要輸出期望多少次操作之後x 變為q 在 998244353 模意義下的值。
(令 ans = x / y, x, y 為正整數且 題目保證 x、y 與998244353 互質,則輸出x * (y^(-1)), (y^(-1)) 表示y在998244353下的乘法逆元,可以證明這樣的逆元存在)
題目保證 t <= 1e6, q <= 1e7, x <= 1e7;
第一行乙個數t接下來t行
每行兩個整數 x, q (x <= q)
輸出t行示例1複製第 i 行的正整數 表示第i次詢問的答案。
2複製7 815 18
2831870297
對於第乙個樣例遞推求逆元模板每一次有0.5的概率結束利用簡單的求和可知是2.
//求逆元,當n特別大時,效果特別好
//begin
ll inv[n];
inline void get_inv()
}//end
對於這種無限次的選擇,自己就會很懵逼,其實直接求確實是不存在,但是我們可以
1.找到狀態表示,找到遞推式
2.給定初始值
然後我們推一下就好了,基本上都是很簡單的,不要恐懼
這道題,我們可以考慮,有用的就是兩個人之間的差值。
所以我們假設 結尾在q,
那麼我可以在
1, 用 f[1] 表示從1點到 n點的期望步數,
可以得到
在2的時候,可以得到
在其他點同理。 然後倒著退回來就好了。
可能那個1比較難理解,我們可以換個角度,如果我們想去q的話,是可以1步直接到的. 要考慮特殊點,特殊值,要不然,沒有出口了,遞迴不能終止了。
#includeusing namespace std;
typedef long long ll;
#define rep(i,a,b) for(int i=a;i=a;--i)
#define clk clock()
const int mod=998244353;
const int n=1e7+10;
ll f[n];
ll inv_mod(ll base,int n)
return ans%mod;
}//求逆元,當n特別大時,效果特別好
//begin
ll inv[n];
inline void get_inv()
}//end
int main()
//double t2=clk;
//printf("%.2f\n",(t2-t1)/clocks_per_sec);
int t;
scanf("%d",&t);
while(t--) else
}return 0;
}
Wannafly挑戰賽25 A 因子
時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 令 x n 給定一大於1的正整數p 求乙個k使得 p k x 並且 p k 1 不是x的因子。兩個數n,p 1e18 n 10000 p 2 乙個數 表示k示例1 ...
Wannafly挑戰賽25 因子 數論
一 題意 令 x n 給定一大於1的正整數p 求乙個k使得 p k x 並且 p k 1 不是x的因子 輸入為兩個數n,p 1e18 n 10000 p 2 二 分析 2.1前置知識 階乘質因數分解 定理 在n!的標準分解式中,質因數p的指數h為 h left right left right su...
Wannafly挑戰賽25A 質因子分解
階乘因子分解,找出n 中有多少個p ll findnum ll n,ll p return ans include include include include include using namespace std typedef long long ll 篩出p的最小質數和個數,再用快速演算法...