题目描述
偏远的小镇上,三兄弟共同经营着一家小型矿业公司“兄弟矿业”。公司旗下有三座矿山:金矿、银矿和铜矿,它们的初始产值分别用非负整数 A、B 和 C 表示。这些矿山的产出是小镇经济的核心,支撑着三兄弟和许多矿工家庭的生计。
然而,各矿山的产值波动剧烈,有时金矿收益高而银矿、铜矿低迷,有时则相反。这种不稳定性让公司收入难以预测,也常引发兄弟间的争执。为了稳定经营,三兄弟设计了一个公平的产值调整策略,每年执行一次,每次调整时,将根据当前的产值 A、B、C,计算新产值:
-
金矿新产值:A′=⌊2B+C⌋;
-
银矿新产值:B′=⌊2A+C⌋;
-
铜矿新产值:C′=⌊2A+B⌋;
其中,⌊⌋ 表示向下取整。例如,⌊3.7⌋=3,⌊5.2⌋=5。
计算出 A′、B′、C′ 后,同时更新:A 变为 A′,B 变为 B′,C 变为 C′,作为下一年调整的基础。
三兄弟认为这个方法能平衡产值波动,于是计划连续执行 K 次调整。现在,请你帮他们计算,经过 K 次调整后,金矿、银矿和铜矿的产值分别是多少。
输入格式
输入的第一行包含一个整数 T,表示测试用例的数量。
接下来的 T 行,每行包含四个整数 A,B,C,K,分别表示金矿、银矿和铜矿的初始产值,以及需要执行的调整次数。
输出格式
对于每个测试用例,输出一行,包含三个整数,表示经过 K 次调整后金矿、银矿和铜矿的产值,用空格分隔。
输入输出样例
输入 #1复制
2
10 20 30 1
5 5 5 3
输出 #1复制
25 20 15
5 5 5
说明/提示
评测用例规模与约定
-
对于 30% 的评测用例,1≤T≤100,1≤A,B,C,K≤105。
-
对于 100% 的评测用例,1≤T≤105,1≤A,B,C,K≤109。
#include
using namespace std;
const int N = 501;
int A[N][N],s[N][N];
int main() {
int n;
cin>>n;
while(n--)
{
int a,b,c,k;//输入
cin>>a>>b>>c>>k;
while(k--)
{
int a1,b1,c1;
a1=a;b1=b;c1=c;//直接设三个中间量
a=(b1+c1)/2;//计算
b=(a1+c1)/2;
c=(a1+b1)/2;
if(a==b&&b==c)
{
break;
}//关键 去年就是没写这个 错失省二至少...
//从题目给的样例可以看到 最后一组 两次都是555 就没有计算的必要了
}
cout<<a<<' '<<b<<' '<<c<<endl;
}
return 0;
}