QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#226863 | #3168. Letter Wheels | SolitaryDream# | RE | 0ms | 0kb | C++17 | 1.7kb | 2023-10-26 17:25:54 | 2023-10-26 17:25:54 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const int N = 32;
inline set<vector<int>> Update(const set<vector<int>> &st, int x, int y) {
static set<vector<int>> f[N][N];
set<vector<int>> ans;
for (auto vec : st) {
int sm = x + y;
f[0][x].insert({0});
for (int k = 0; k < vec.size(); ++k) {
for (int i = 0; i <= x; ++i) {
int j = sm - i;
if (j < 0 || j > y) continue;
for (auto cur : f[k][i]) {
for (int d = 0; d <= vec[k]; ++d) if (d <= i && vec[k] - d <= j) {
vector<int> ncur(cur);
if (d) ncur.push_back(d);
if (vec[k] - d) ncur.push_back(vec[k] - d);
sort(ncur.begin(), ncur.end(), greater<int>());
f[k + 1][i - d].insert(ncur);
}
}
}
sm -= vec[k];
}
for (auto cur : f[vec.size()][0]) {
cur.pop_back();
ans.insert(cur);
}
for (int k = 0; k <= vec.size(); ++k)
for (int i = 0; i <= x; ++i) {
f[k][i].clear();
}
}
return ans;
}
int main() {
int n, m;
cin >> n >> m;
set<vector<int>> st;
st.insert({n});
for (int i = 1, x; i <= m; ++i) {
cin >> x;
st = Update(st, x, n - x);
cout << st.size() << endl;
}
int ans = 0;
for (auto vec : st) {
int cur = 0;
while (vec.size() && vec.back() == 1) ++cur, vec.pop_back();
ans = max(ans, cur);
}
printf("%d\n", ans);
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Runtime Error
input:
ABC ABC ABC