Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33709 | 申东铉 | 【S】T3 | C++ | 运行出错 | 0 | 0 MS | 260 KB | 1266 | 2024-10-20 14:29:44 |
#include <bits/stdc++.h> #define int long long using namespace std; const int md = 998244353; int n,a[514],mx; signed main () { freopen("mod.in","r",stdin); freopen("mod.out","w",stdin); cin >> n; for (int i = 1;i <= n;i++) { cin >> a[i]; mx = max(mx,a[i]); } if (n <= 2) { int ans = 0; if (n == 1) { bool b[514]; memset(b,0,sizeof(b)); b[a[1]] = 1; for (int i = mx;i >= 1;--i) { for (int j = 0;j <= mx;++j) { b[j % i] |= b[j]; } } for (int i = 0;i <= mx;++i) { ans += b[i]; } cout << ans << endl; return 0; } bool b[514][514]; memset(b,0,sizeof(b)); b[a[1]][a[2]] = 1; for (int i = mx;i >= 1;--i) { for (int x = 0;x <= a[1];++x) { for (int y = 0;y <= a[2];++y) { b[x % i][y % i] |= b[x][y]; } } } for (int x = 0;x <= a[1];++x) { for (int y = 0;y <= a[2];++y) { ans += b[x][y]; } } cout << ans << endl; return 0; } int f[514],ans = 0; bool b[514]; f[n] = 1; for (int i = n;i >= 0;--i) { f[i] = f[n]; for (int j = i + 1;j < n;++j) { if ((j + 1) % (i + 1) == 0) { continue; } f[i] += f[j]; f[i] %= md; } ans += f[i]; ans %= md; } cout << ans << endl; return 0; }