QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#584374 | #8834. Formal Fring | 287029 | WA | 0ms | 3608kb | C++14 | 1.7kb | 2024-09-23 13:22:18 | 2024-09-23 13:22:19 |
Judging History
answer
#include <bits/stdc++.h>
#define bit(x) (1LL << (x))
#define lowbit(x) (x & (-x))
#define SQU(x) ((x) * (x))
#define ls id << 1
#define rs id << 1 | 1
//#define int long long
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 2e5 + 5;
const int inf = 0x3f3f3f3f;
const int mod = 998244353;
const int inv2 = (mod + 1) / 2;
ll qpow(ll x,ll y) {
ll res = 1;
while(y) {
if(y & 1) res = res * x % mod;
x = x * x % mod;
y >>= 1;
}
return res;
}
void add(int &x,int y) {
x += y;
if(x >= mod) x -= mod;
}
const int dx[] = {0,0,1,-1};
const int dy[] = {1,-1,0,0};
void solve() {
int n;cin >> n;
vector <ll> f(n + 1),dp(n + 1);
dp[0] = 1;
for(int i = 1;i <= n;i <<= 1) {
for(int j = i;j <= n;j++) {
dp[j] = (dp[j] + dp[j - i]) % mod;
}
}
for(int i = 1;i <= n;i++) {
int j = 0;
while(bit(j) <= i) j += 1;
if(i == bit(j) - 1) {
f[i] = dp[i];
cout << f[i] << ' ';
continue;
}
j -= 1;
ll now = 0,cnt = 0,k = 0;
while(i & bit(j)) {
cnt = cnt * 2 + 1;
//cout << i << ' ' << j << ' ' << cnt << ' ' << k << '\n';
k |= bit(j);
//cout << dp[cnt] << ' ' << i - k << ' ' << dp[i - k] << ' ';
f[i] = (f[i] + (dp[cnt] - now + mod) % mod * dp[i - k] % mod) % mod;
//cout << f[i] << ' ';
j -= 1;
now = (now + dp[cnt]) % mod;
}
cout << f[i] << ' ';
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cout << fixed << setprecision(20);
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
int T = 1;
// cin >> T;
while(T--) {
solve();
}
return 0;
}
/*
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3480kb
input:
10
output:
1 1 2 1 1 3 6 1 1 2
result:
ok 10 numbers
Test #2:
score: -100
Wrong Answer
time: 0ms
memory: 3608kb
input:
70
output:
1 1 2 1 1 3 6 1 1 2 2 5 5 11 26 1 1 2 2 4 4 6 6 11 11 16 16 27 27 55 166 1 1 2 2 4 4 6 6 10 10 14 14 20 20 26 26 37 37 48 48 64 64 80 80 107 107 134 134 189 189 375 1626 1 1 2 2 4 4 6
result:
wrong answer 30th numbers differ - expected: '53', found: '55'