QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#73998#3161. Another Coin Weighing PuzzleUCSC_Ravioli#ML 2ms3336kbC++20885b2023-01-30 08:04:462023-01-30 08:04:47

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-01-30 08:04:47]
  • 评测
  • 测评结果:ML
  • 用时:2ms
  • 内存:3336kb
  • [2023-01-30 08:04:46]
  • 提交

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<vector<ll>> dp(m+1, vector<ll>(m+1));
	vector<ll> largest(k, 1);
	dp[0][0] = 1;
	ll x = 1;
	for(int i=1; i<=m; i++){
		x = x*k%mod;
		dp[0][i] = x;
		for(int i=1; i<k; i++) dp[0][i] -= largest[i];
		dp[0][i] = (dp[0][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++){
		for(int j=0; j<m; j++){
			dp[i][j] = dp[i-1][j] + 2*dp[i-1][j+1];
			dp[i][j] %= mod;
			// cout << i << " weighings, bits = " << j << ": " << dp[i][j] << endl;
		}
	}
	cout << dp[m][0] << endl;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 3308kb

input:

2 1

output:

9

result:

ok single line: '9'

Test #2:

score: 0
Accepted
time: 1ms
memory: 3336kb

input:

2 2

output:

17

result:

ok single line: '17'

Test #3:

score: -100
Memory Limit Exceeded

input:

10000 10000

output:


result: