题目描述

偏远的小镇上,三兄弟共同经营着一家小型矿业公司“兄弟矿业”。公司旗下有三座矿山:金矿、银矿和铜矿,它们的初始产值分别用非负整数 A、B 和 C 表示。这些矿山的产出是小镇经济的核心,支撑着三兄弟和许多矿工家庭的生计。

然而,各矿山的产值波动剧烈,有时金矿收益高而银矿、铜矿低迷,有时则相反。这种不稳定性让公司收入难以预测,也常引发兄弟间的争执。为了稳定经营,三兄弟设计了一个公平的产值调整策略,每年执行一次,每次调整时,将根据当前的产值 A、B、C,计算新产值:

  1. 金矿新产值:A′=⌊2B+C​⌋;

  2. 银矿新产值:B′=⌊2A+C​⌋;

  3. 铜矿新产值: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;
}