結果
| 問題 |
No.1066 #いろいろな色 / Red and Blue and more various colors (Easy)
|
| コンテスト | |
| ユーザー |
rtia_iidx
|
| 提出日時 | 2020-05-29 22:25:19 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 232 ms / 2,000 ms |
| コード長 | 6,885 bytes |
| コンパイル時間 | 1,078 ms |
| コンパイル使用メモリ | 106,312 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-11-06 05:40:58 |
| 合計ジャッジ時間 | 3,454 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 24 |
ソースコード
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<unordered_map>
#include<climits>
#include<cstdlib>
#include<cmath>
#include<string>
#include<iomanip>
#include<bitset>
#include<list>
/*
__,.二ニ==- ニ.、_.
.,..‐ ⌒ ``'ァ-ニ、.
ィ'´. ´丶.、
.,ィ'´ `.x、..
.. /. 、\.
.ン′. ¬`""冖ーミト.
,r′. .ヘ、 `
ツ `、....
./´ ヘ
..... /. .〉.
´/.. .l
ィ . f..
.. .f ,d. l ′ 」 ,. ト !
. 〕../.f.. ′ .. | .} | |.
.!./..f.. / !- ナ丶п冖т ノー- . 〕 |.
|メ | | j , ┌. |〈. л`. /|.. ┤,..
...「...|. | ´ l. | j.L......ュ.L_└ヽ_|Y. メムw ょ | j.: |  ̄
. |. т〕<.ィ冖T冖.. г‐ `、 `, /┴¬..г ̄|.. .′ |
... | ... ),|.. ` リ 「_ノ.|| ` V |!{,「ll ´.」. 卜
. |.」 ′ ヽ └++〃.. ルwf カz′. |.
|..〕 「 .|
.l.|. ′. |
. .〕.. `! _.....ー:'' 」 ´ λ.
_「. , ┐_,、`~‐''"´ ィ .、 ヘ、
f :__..,二ュ.-i―'''^~´ 、\イ ヘ.`x
. / { j .~^
、/ 't.. 丿..
.../. ,x┐.. ∠∫
:^. /  ̄冖ー=zzュ┌ー―-- ∟,二..._. _,、.-ー.'l+~. .l`.
. У. ⌒冖‐-=._.. l「.「 ´ ̄」了 .,、-''^ 〉 ヽ_
_/.  ̄~'.ー-=.、_,..usァ.ー''" { \´
_ヰl'¬―- 、_ ( .\
*/
using namespace std;
using ll = long long int;
using ull = unsigned long long int;
ll const MOD = 998244353;
ll const INF = (long long int)1 << 61;
ll mypow(ll x,ll n,ll mod = MOD){
ll ret = 1;
while(n > 0){
if(n&1){
ret = (ret*x)%mod;
}
x = (x*x)%mod;
n >>= 1;
}
return ret;
}
ll mygcd(ll a,ll b){
if(b == 0)return a;
return mygcd(b,a%b);
}
ll twoPow(ll shiftNum){
return (1LL << (shiftNum - 1));
}
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
ll n,q;
cin >> n >> q;
vector<ll> a(n);
vector<ll> b(q);
for(int i = 0; i < n; i++){
cin >> a[i];
}
for(int i = 0; i < q; i++){
cin >> b[i];
}
vector<ll> p(n);
vector<ll> rp(n);
ll total = 1;
for(int i = 0; i < n; i++){
p[i] = mypow(a[i],MOD - 2);
rp[i] = (1 + (MOD - p[i]))%MOD;
total = (total * a[i])%MOD;
}
vector<vector<ll>> dp(2,vector<ll>(n+1,0));
dp[0][0] = 1;
for(int i = 0; i < n; i++){
for(int j = 0; j < n+1; j++){
dp[1][j] = 0;
}
for(int j = 0; j < n+1; j++){
dp[1][j] += (dp[0][j]*rp[i])%MOD;
dp[1][j] %= MOD;
if(j+1 < n+1){
dp[1][j+1] += (dp[0][j]*p[i])%MOD;
dp[1][j+1] %= MOD;
}
}
swap(dp[0],dp[1]);
}
for(int i = 0; i < q; i++){
cout << (dp[0][b[i]]*total)%MOD << endl;
}
return 0;
}
rtia_iidx