没难度上代码。
#include <bits/stdc++.h>
using namespace std;
struct node {
int v1, v2;
};
vector<node> ans;
bool cmp (node a, node b) {
return a.v1 < b.v1;
}
int mp[1010];
int main() {
int n, m, a, v1, v2;
scanf ("%d %d", &n, &m);
for (int i = 0; i < n; i++) {
scanf ("%d", &a);
mp[a]++;
}
for (int i = 500; i >= 0; i--) {
if (mp[i] != 0 && i < m && mp[m - i] != 0) {
v2 = i;
mp[i]--;
if (mp[m - i] != 0) v1 = m - i;
if (v2 >= v1 && v1 + v2 == m) ans.push_back(node{v1, v2});
else break;
}
}
sort (ans.begin(), ans.end(), cmp);
if (ans.size() != 0) printf ("%d %d", ans[0].v1, ans[0].v2);
else printf ("No Solution");
}