T4
2025-01-19 22:18:25
发布于:北京
20阅读
0回复
0点赞
T4
题目名称:ABC游戏
时间限制:.
空间限制:
题意分析
这道题输入三个数a,b,c,求每次执行下列两个操作之一,最少几次能让三个数都相等。
操作1:选择两个数将两个数各加1
操作2:选择一个数加2
关键思路
这道题我们可以采用一种策略,要现将整体逼近于最大元素,再增加最小元素使它与其他元素相等,在先将3个数存在数组里,并排序,然后按题意模拟,求出第二大元素和第一大元素的差值,然后将第二大元素和第三大元素连续增加上前面计算好的差值,使用操作一,使第二大元素和最大元素相等,如果第三大元素还小于最大元素,就要使用操作二,有两种情况:
1.第三大元素和最大元素的差值为奇数,这时无法通过操作二直接增加到最大元素,就要将其余两个元素再各加1,这样差值就为偶数了
2.差值为偶数,可以直接将第三大元素增加,三个元素相等,万事大吉
在模拟过程中要使用变量记录操作次数
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin >> t;
while(t --){
int arr[4] = {};
cin >> arr[1] >> arr[2] >> arr[3];//输入a,b,c
sort(arr+1,arr+4,greater<int>());//降序排序
int ans = 0;
ans += arr[1] - max(arr[2],arr[3]);//求出第二大元素比最大元素少多少
arr[2] += ans;//增加(操作一)
arr[3] += ans;
if(arr[3] < arr[1]){//如果最小的元素还比最大元素小
if( (arr[1] - arr[3]) % 2 != 0){//差为奇数由于无法通过操作二凑相等,所以要将其余两个元素再加1
ans ++;
}
ans += ceil((arr[1] - arr[3]) / 2.0);//求出需要执行多少次操作二才能相等
}
cout << ans << endl;//输出
}
return 0;
}
这里空空如也
有帮助,赞一个