小白月赛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;
}
#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;
}