当前位置: 移动技术网 > IT编程>开发语言>C/C++ > 数据结构算法(给出两个数组通过计算规则得到数组c)

数据结构算法(给出两个数组通过计算规则得到数组c)

2020年08月23日  | 移动技术网IT编程  | 我要评论
传送门题意: 给出两个只由0,1,2组成的数组a,b;可通过一种计算规则得到相应的数组c:c[i] = a[i]*b[i] , a[i] > b[i]c[i] = 0 , a[i] == b[i]c[i] = -a[i]*b[i], a[i] < b[i]现可将a,b进行特定的排序,使得sum©得到最大值,并求出该max。思路:正贡献(+2)的情况,a[i] > b[i],那么就要认a中的2尽量多的对应b的1.无贡献的情况,a[i]

题意: 给出两个只由0,1,2组成的数组a,b;可通过一种计算规则得到相应的数组c:

  • c[i] = a[i]*b[i] , a[i] > b[i]
  • c[i] = 0 , a[i] == b[i]
  • c[i] = -a[i]*b[i], a[i] < b[i]

现可将a,b进行特定的排序,使得sum©得到最大值,并求出该max。
在这里插入图片描述
思路:

  • 正贡献(+2)的情况,a[i] > b[i],那么就要认a中的2尽量多的对应b的1.
  • 无贡献的情况,a[i]为0或b[i]为0,所以让a的0尽量多的对应b的2,消耗掉b中的大元素。
  • 负贡献(-2)的情况,最后若还有避免不了的a中的1和b中的2相对应,那就再加上这些负贡献。

代码实现:

#include<bits/stdc++.h> #define endl '\n' #define null NULL #define ll long long #define int long long #define pii pair<int, int> #define lowbit(x) (x &(-x)) #define ls(x) x<<1 #define rs(x) (x<<1+1) #define me(ar) memset(ar, 0, sizeof ar) #define mem(ar,num) memset(ar, num, sizeof ar) #define rp(i, n) for(int i = 0, i < n; i ++) #define rep(i, a, n) for(int i = a; i <= n; i ++) #define pre(i, n, a) for(int i = n; i >= a; i --) #define IOS ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); const int way[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; using namespace std; const int inf = 0x7fffffff; const double PI = acos(-1.0); const double eps = 1e-6; const ll   mod = 1e9 + 7; const int N = 2e5 + 5; int t, n, x1, y1, z1, x2, y2, z2; signed main(){ IOS; cin >> t; while(t --){ cin >> x1 >> y1 >> z1; cin >> x2 >> y2 >> z2; int ans = 0; int cnt1 = min(z1,y2); ans += cnt1*2; z1 -= cnt1; y2 -= cnt1; int cnt2 = min(x1,z2); x1 -= cnt2; z2 -= cnt2; if(z2 && z1 < z2) ans -= (z2-z1)*2; cout << ans << endl; } return 0; } 

本文地址:https://blog.csdn.net/Satur9/article/details/108171250

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网