小白月赛74 G题 模拟
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;

int cut(int h,int ch,int ach,int gr,int day)//初始高度,要修剪的高度,修剪后高度,每天生长高度,天数
{
    int cd1 = (ch-h)/gr+1;//第一轮到初始值需要的时间
    if(day<cd1) return h+gr*day;
    else day-=cd1,h=ach;
    
    int cut_r = (ch-ach)/gr+1;//修剪后要生长的高度/每天生长高度 向上取整 => 每次修剪间隔的时间
    return ach+gr*(day%cut_r);
}

int t;
int n,m,k,b;

int tree[N];
int grow[N];

int main()
{
    //cout<<cut(4,10,3,2,4);//初始高度为4,长到10后修建为3,每天长2,长4天
    cin>>t;
    while(t--)
    {
        cin>>n>>m>>k>>b;//树数,第m天,长到k剪为b
        for(int i=0;i<n;i++) scanf("%d",&tree[i]);
        for(int i=0;i<n;i++) scanf("%d",&grow[i]);
        
        for(int i=0;i<n;i++) cout<<cut(tree[i],k,b,grow[i],m-1)<<" ";
        cout<<endl;
    }
    
    
    
    return 0;
}