社区讨论

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 年前
查看原帖

不要是特判!!!

没O2&开O2(没错我是@sz_jinzikai)
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 条回复,欢迎继续交流。

正在加载回复...