社区讨论
87pts,c艹,最后一个点TLE287ms,开O2厌氧变成288ms,求改进
P1120[CERC 1995] 小木棍参与者 2已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lo27s7ax
- 此快照首次捕获于
- 2023/10/23 09:23 2 年前
- 此快照最后确认于
- 2023/11/03 09:38 2 年前
不要是特判!!!
CPP# include <bits/stdc++.h>
# define old_six \
ios::sync_with_stdio (0);\
\
cin.tie (0);\
\
cout.tie (0);
# define reg register
# define inl inline
using namespace std;
typedef size_t st;
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
int sum, ans, n, a[70], g, maxx;
bool vis[70];
void dfs (int now, int len, int s) {
if (now > sum / g) {
cout << g;
exit (0);
}
if (len == g)
return dfs (now + 1, 0, 0);
int last = 0;
for (reg int i = s; i < n; ++ i)
if (! vis[i] && len + a[i] <= g && last != a[i]) {
vis[i] = 1;
dfs (now, len + a[i], i);
vis[i] = 0;
if (! len || len + a[i] == g)
return ;
last = a[i];
}
return ;
}
int main () {
old_six
cin >> n;
for (reg int i = 0; i < n; ++ i)
cin >> a[i], maxx = max (maxx, a[i]), sum += a[i];
sort (a, a + n, greater <int> ());
for (g = maxx; g <= sum; ++ g)
if (sum % g < 1) {
for (reg int i = 0; i < n; ++ i)
vis[i] = 0;
dfs (1, 0, 0);
}
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...