2017 Russian Code Cup (RCC 17), Final Round

Set Theory

思路:原题转换一下就是找一个b数组,使得b数组任意两个数的差值都和a数组任意两个数的差值相等

根据题目数据范围, 肯定可以构造一个1, 1+d, 1+2d, 1+3d, ... , 1+(n-1)*d的序列

代码:

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(4)
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pi acos(-1.0)
#define LL long long
//#define mp make_pair
#define pb push_back
#define ls rt<<1, l, m
#define rs rt<<1|1, m+1, r
#define ULL unsigned LL
#define pll pair<LL, LL>
#define pli pair<LL, int>
#define pii pair<int, int>
#define piii pair<pii, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout);
//head

const int N = 105, M = 1e6 + 4;
int a[N];
bool vis[M];
int main() {
    int n, T;
    scanf("%d", &T);
    while(T--) {
        scanf("%d", &n);
        for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
        sort(a+1, a+1+n);
        bool f = true;
        for (int i = 1; i <= n; i++) {
            if(a[i] == a[i-1]) {
                f = false;
                break;
            }
        }
        if(!f) {
            puts("NO");
            continue;
        }
        f = true;
        mem(vis, false);
        for (int i = 1; i <= n; i++) {
            for (int j = i+1; j <= n; j++) {
                vis[a[j] - a[i]] = true;
            }
        }
        for (int i = 1; i <= 1000000; i++) {
            if(!vis[i]) {
                int cnt = 1;
                for (int j = i+i; j <= 1000000; j += i) {
                    if(!vis[j]) cnt++;
                    else break;
                }
                if(cnt >= n-1) {
                    f = false;
                    puts("YES");
                    for (int j = 1; j <= n; j ++) printf("%d ", 1+(j-1)*i);
                    printf("\n");
                    break;
                }
            }
        }
        if(f) puts("NO");
    }
    return 0;
}
View Code

相关文章:

  • 2021-11-10
  • 2021-10-10
  • 2022-12-23
  • 2021-08-06
  • 2022-02-28
  • 2021-08-08
  • 2022-02-03
  • 2021-12-06
猜你喜欢
  • 2021-09-19
  • 2021-06-30
  • 2022-02-26
  • 2022-01-08
  • 2021-09-22
  • 2021-08-30
相关资源
相似解决方案