题解 | #简单的整除#
简单的整除
https://ac.nowcoder.com/acm/contest/59284/A
E题题解,希望大家能开心做题!
#include<bits/stdc++.h>
using namespace std;
const int N =1e6+10;
int a[N],h[N],ans[N];
int n,m,k,b;
int main()
{
int t;cin>>t;
while(t--)
{
memset(ans,0,sizeof(ans)); //初始化答案数组
cin>>n>>m>>k>>b;
for(int i=1;i<=n;i++) cin>>h[i]; //输入初始高度
for(int i=1;i<=n;i++)
{
cin>>a[i]; //输入每次操作的高度
int mid=(k-h[i])/a[i]+1; //找到规律与不规律的临界点
if(m<=mid) //不规律的上面部分
{
ans[i]=h[i]+a[i]*(m-1);
}else //规律的下半部分
{
int mm=m-mid; //除去不规律的,剩余规律的个数
int y=(k-b)/a[i]+1; //一个规律循环的个数
if(y==1) ans[i]=b; //y==1说明规律只有1种,不断重复一个数字
else
{
mm%=y; //通过取余找到所在规律的第几个数
if(!mm) mm=y; //刚好为最后一个值,那就是y
ans[i]=b+a[i]*(mm-1);
}
}
}
for(int i=1;i<=n;i++) cout<<ans[i]<<' ';
cout<<endl;
}
return 0;
}