A - Gold and Silver
官方题解简直yyds 官方题解
但是官方题解的代码不是C++,还是附上C++代码吧
int a[N], ans[N];
int main()
{
IOS;
int n;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
for (int i = 0; i < n - 1; i++)
{
//这里的异或运算简直不要太完美,自己品味理解最好
if (a[i] > a[i + 1])
{
ans[i] ^= 1;
ans[i + 1] ^= 1;
}
}
for (int i = 0; i < n; i ++ ) cout << ans[i] << " ";
return 0;
}
B - Balls of Three Colors
官方题解(实在是想不出来)
这题的关键就是能够发现只有两种颜色的数量差是3的倍数时,那么这两种颜色就能完全变成另外一种颜色
根据R,G,B -> R-1,G-1,B+2,我们会发现,任意两个数的差值对3取余的余数没有发生改变,所以最后变为0的两个数一开始的差值一定是3的倍数
我们假设abs(R-B)%3==0, 并且R > B,那么可以进行如下操作将R和B转化为G
总共需要的次数也就是B + (R-B) 即R次
最后再判断其他情况的答案取最小值即可
int ans = inf;
inline void solve(int R, int G)
{
int b = max(R, G);
ans = min(ans, b);
}
int main()
{
IOS;
int T;
cin >> T;
while (T--)
{
ans = inf;
int r, g, b;
cin >> r >> g >> b;
if (abs(r - g) % 3 == 0) solve(r, g);
if (abs(r - b) % 3 == 0) solve(r, b);
if (abs(g - b) % 3 == 0) solve(g, b);
if (ans == inf) cout << "-1\n";
else cout << ans << "\n";
}
return 0;
}