社区讨论

求调,最后一个点WA

P1286两数之和参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m0c7us2u
此快照首次捕获于
2024/08/27 17:19
2 年前
此快照最后确认于
2025/11/04 22:16
4 个月前
查看原帖
CPP
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 9;
const int maxm = maxn * (maxn -  1) >> 1; 
int ans[maxn + 5];
int s[maxm + 5];
bool used[maxm + 5];
int n, m;
bool check(int x)
{
	ans[1] = x;
	int r = 1;
	for(int i = 2; i <= n; ++i)
	{
		ans[i] = s[r] - ans[1];
		int k = r;
		for(int j = 1; j < i; ++j)
		{
			bool t = 1;
			for(; k <= m; ++k)
				if(!used[k] && s[k] == ans[i] + ans[j])
				{
					used[k] = 1,
					t = 0;
					break;
				}
//			cout << i << ' ' << j << ' ' << k << "  ";
//			for(int i = 1; i <= m; ++i)
//				cout << used[i] << " \n"[i == m];
			if(t)
				return 0;
		}
		while(used[++r]);
	}
	return 1;
}
int main()
{
	while (cin >> n)
	{
		memset(s, 0, sizeof(s));
		memset(ans, 0, sizeof(ans));
		m = n * (n - 1) >> 1;
		for(int i = 1; i <= m; ++i)
			cin >> s[i];
		sort(s + 1, s + m + 1);
		for(int i = 1; i <= s[1] / 2; ++i)
		{
			memset(used, 0, sizeof used);
			if(check(i))
			{
				for(int i = 1; i <= n; ++i)
					cout << ans[i] << " \n"[i == n];
				return 0;
			}
		}
		cout << "Impossible\n";
	}
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...