QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#73999 | #3161. Another Coin Weighing Puzzle | UCSC_Ravioli# | TL | 2ms | 3344kb | C++20 | 881b | 2023-01-30 08:08:17 | 2023-01-30 08:08:19 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
int main(){
ios::sync_with_stdio(false); cin.tie(0);
int m, k;
cin >> m >> k;
const ll mod = 998244353;
vector<ll> dp(m+1);
vector<ll> largest(k, 1);
dp[0] = 1;
ll x = 1;
for(int i=1; i<=m; i++){
x = x*k%mod;
dp[i] = x;
for(int i=1; i<k; i++) dp[i] -= largest[i];
dp[i] = (dp[i]%mod+mod)%mod;
vector<ll> newlargest(k);
for(int i=1; i<k; i++){
for(int j=1; j<=i; j++){
newlargest[i] += largest[j];
newlargest[i] %= mod;
}
}
swap(largest, newlargest);
}
for(int i=1; i<=m; i++){
vector<ll> new_dp(m+1);
for(int j=0; j<m; j++){
new_dp[j] = dp[j] + 2*dp[j+1];
new_dp[j] %= mod;
// cout << i << " weighings, bits = " << j << ": " << dp[i][j] << endl;
}
swap(dp,new_dp);
}
cout << dp[0] << endl;
}
详细
Test #1:
score: 100
Accepted
time: 2ms
memory: 3284kb
input:
2 1
output:
9
result:
ok single line: '9'
Test #2:
score: 0
Accepted
time: 2ms
memory: 3344kb
input:
2 2
output:
17
result:
ok single line: '17'
Test #3:
score: -100
Time Limit Exceeded
input:
10000 10000