社区讨论
求调,最后一个点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 条回复,欢迎继续交流。
正在加载回复...