CF856A Set Theory 题解

题面传送门

思路

其实很好理解,给定一个数组 \(A\)\(n\) 个数,要在求出 \(n\) 个数,使 \(A_x+A_y\not=A_m+A_n\)。理解了这些,其他的就很简单了,直接跟着思路模拟即可。

代码

#include <bits/stdc++.h>
using namespace std;
int n, ss, a[111], s[111], t, z = 1;
bool l[2100000];
int main()
{
    for (cin >> t; z <= t; z++)
    {
        for (int i = 1; i < n; i++)
            for (int j = i + 1; j <= n; j++)
                l[abs(a[i] - a[j])] = 0;
        ss = 0;
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        for (int x = 1; x <= 1000000 && ss < n; x++)
        {
            if (l[x])
                continue;
            s[++ss] = x;
            for (int i = 1; i < n; i++)
                for (int j = i + 1; j <= n; j++)
                    l[abs(a[j] - a[i]) + x] = 1;
        }
        if (ss < n)
            cout << "NO\n";
        else
        {
            cout << "YES\n";
            for (int i = 1; i <= n; i++)
                cout << s[i] << ' ';
            cout << "\n";
        }
    }
    return 0;
}
			 			 		   		 	 	 		  	
posted @ 2023-10-04 08:59  _Unnamed  阅读(11)  评论(0)    收藏  举报