CF1582D.Vupsen, Pupsen and 0 ——构造

1582D

题意:

给出a数组及其范围,要求构造b数组使得sigma(ai * bi) == 0

思路:

两两凑0

// Decline is inevitable,
// Romance will last forever.
#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define pii pair<int,int>
#define fi first
#define se second
#define ll long long
#define LL long long
#define int long long
const int maxn = 1e5 + 10;
const int maxm = 1e3 + 10;
const int INF = 0x3f3f3f3f;
const int dx[] = {0, 0, -1, 1}; //{0, 0, 1, 1, 1,-1,-1,-1}
const int dy[] = {1, -1, 0, 0}; //{1,-1, 1, 0,-1, 1, 0,-1}
const int P = 1e9 + 7;
int n;
int a[maxn];
int ans[maxn];
void solve() {
    cin >> n;
    for(int i = 1; i <= n; i++)
        ans[i] = 0;
    for(int i = 1; i <= n; i++)
        cin >> a[i];
    if(!(n&1)) {
        for(int i = 1; i <= n; i++) {
            if(i & 1) ans[i] = a[i+1];
            else ans[i] = -a[i-1];
        }
        for(int i = 1; i <= n; i++)
            cout << ans[i] << ' ';
        cout << '\n';
        return;
    }
    for(int i = 1; i < n; i++) {
        if(i & 1) ans[i] = a[i+1];
        else ans[i] = -a[i-1];
    }
    while(ans[1] == 0 || ans[n] == 0) {
        ans[n] += a[1];
        ans[1] -= a[n];
    }
    for(int i = 1;i <= n; i++)
        cout << ans[i] << ' ';
    cout << '\n';
}
signed main() {
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//    int T; scanf("%d", &T); while(T--)
//    freopen("1.txt","r",stdin);
//    freopen("2.txt","w",stdout);
//    cout << lcm(1, -2);
    int T; cin >> T;while(T--)
    solve();
    return 0;
}
/*
 
 
 
 */

猜你喜欢

转载自blog.csdn.net/m0_59273843/article/details/120950038