题目:3636. 数组延伸
题解:如果b[i]%x==0,那么在数组中添加的b[i]/x的个数之和也还是等于a[i],利用这个规律(只要b[i]可以被x整除,那么sum就加上对应的a[i],b[i]更新为b[i]/x,然后接着往下遍历),用循环来做,直到找到b[i]%x!=0跳出即可
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int ,int> PII;
const int N=1e5+10;
const int mod=100000007;
const double PI=acos(-1);
int t;
int a[N];
int b[N];
int main(){
cin>>t;
int n,x;
while(t--){
cin>>n>>x;
LL sum=0;
for(int i=0;i<n;i++){
cin>>a[i];
b[i]=a[i];
sum+=a[i];
}
int i=0;
while(1){
if(b[i]%x==0){
sum+=a[i];
b[i]=b[i]/x;
i++;
i=i%n;
}else{
break;
}
}
cout<<sum<<endl;
}
return 0;
}