QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#73999#3161. Another Coin Weighing PuzzleUCSC_Ravioli#TL 2ms3344kbC++20881b2023-01-30 08:08:172023-01-30 08:08:19

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:08:19]
  • 评测
  • 测评结果:TL
  • 用时:2ms
  • 内存:3344kb
  • [2023-01-30 08:08:17]
  • 提交

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;
}

Details

Tip: Click on the bar to expand more detailed information

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

output:


result: