题目:幼稚园的树2
牛牛在幼稚园做义工,幼稚园中共有 n 棵树,第 1 天中午时它们的高度分别为:ℎ1,ℎ2,…,ℎn(单位:毫米)。
每一天的晚上第 i 棵树的高度会增加 ai毫米,而牛牛的任务则是在第二天的清晨检查每一棵树的高度,若某棵树的高度超过了 k 毫米牛牛就会将它的高度修剪为 b 毫米。
牛牛想请你帮它计算一下第 m 天中午每一棵树的高度。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #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() { cin>>t; while(t--) { cin>>n>>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; }
|