欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Vupsen, Pupsen and 0 思维,凑系数

发布时间:2025/3/19 编程问答 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Vupsen, Pupsen and 0 思维,凑系数 小编觉得挺不错的,现在分享给大家,帮大家做个参考.


题意 :

  • 给一长为n的序列,不含0,求构造一个长为n的不包含0的序列满足两个序列的乘积和为0,且构造的序列的元素绝对值和不超过1e91e91e9

思路 :

  • 首先如果n是偶数,很容易构造,只要令b[i]=a[i+1]b[i] = a[i + 1]b[i]=a[i+1]b[i+1]=−a[i]b[i + 1] = -a[i]b[i+1]=a[i],两两配对即可
  • 如果n是奇数,取前三个令它们三个的和为0,剩下的就是偶数情况了。要使a[i]∗b[i]+a[i+1]∗b[i+1]+a[i+2]∗b[i+2]=0a[i]*b[i] + a[i + 1] * b[i + 1] + a[i + 2] * b[i + 2] = 0a[i]b[i]+a[i+1]b[i+1]+a[i+2]b[i+2]=0,可以令b[i]=a[i+1]+a[i+2]b[i] = a[i + 1] + a[i + 2]b[i]=a[i+1]+a[i+2]b[i+1]=b[i+2]=−a[i]b[i + 1] = b[i + 2] = -a[i]b[i+1]=b[i+2]=a[i],但要满足a[i + 1] + a[i + 2] != 0,分成三种情况即可,因为不可能满足(x + y == 0 && x + z == 0 && y + z == 0) -> (x == 0 && y == 0 && z == 0)
#include <iostream> #include <algorithm> #include <cstring> #include <queue> #include <stack> #include <unordered_set>using namespace std;typedef long long ll;const int N = 1e5 + 10;int a[N];int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int _;cin >> _;while (_ -- ){int n;cin >> n;for (int i = 1; i <= n; i ++ ) cin >> a[i];if (n % 2 == 0){for (int i = 1; i <= n; i += 2)cout << -a[i + 1] << ' ' << a[i] << ' ';cout << endl;}else{int x = a[1], y = a[2], z = a[3];if (x + y != 0) cout << -z << ' ' << -z << ' ' << x + y << ' ';else if (x + z != 0) cout << -y << ' ' << x + z << ' ' << -y << ' ';else cout << y + z << ' ' << -x << ' ' << -x << ' ';for (int i = 4; i <= n; i += 2)cout << -a[i + 1] << ' ' << a[i] << ' ';cout << endl;}}return 0; }

总结

以上是生活随笔为你收集整理的Vupsen, Pupsen and 0 思维,凑系数的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。