)
题目链接https://codeforces.com/contest/2254/problem/A题目大意三人初始各有 a、b、c 个代币若出现两人数量相同则结束否则最多者给最少者1个重复直到有人数量相同求进行的轮数。题目思路:我们可以定义一个长度为三的数组将a,b,c分别输入后进行排序那么此时就会有v[0]v[1]v[2]如果说一开始v[0]v[1]或者v[1]v[2],那么直接输出0否则我们看v[0]和v[2]分别到达v[1]需要多少代币并且取最小值这个最小值就是需要求的轮数了因为在这个过程中v[0]在增大v[2]在减小只有v[1]是个定值时间复杂度O(T*3log3)代码如下#include bits/stdc.h using namespace std; #define endl \n using ll long long; using ld long double; /* https://codeforces.com/contest/2254/problem/A Div.3 CF 1114A题排序贪心 题目大意三人初始各有 a、b、c 个代币若出现两人数量相同则结束 否则最多者给最少者1个重复直到有人数量相同求进行的轮数。 题目思路:我们可以定义一个长度为三的数组将a,b,c分别输入后进行排序那么此时就会有v[0]v[1]v[2] 如果说一开始v[0]v[1]或者v[1]v[2],那么直接输出0否则我们看v[0]和v[2]分别到达v[1]需要多少代币 并且取最小值这个最小值就是需要求的轮数了因为在这个过程中v[0]在增大v[2]在减小只有v[1]是个定值 时间复杂度O(T*3log3) */ void solve() { vectorint v(3); for (int i 0; i 3; i) { cin v[i]; } sort(v.begin(), v.end());//从小到大排序 int cnt 0; if (v[0] v[1] || v[1] v[2])//任意一种情况相等均输出0 { cout cnt endl; return; } int mid1 v[1] - v[0];//v[0]到达v[1] int mid2 v[2] - v[1];//v[2]到达v[1] cnt min(mid1, mid2);//取最小操作次数 cout cnt endl; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin T; while (T--) { solve(); } return 0; }