给你一个长度为 n 的数组 A 和一个整数 m,你可以执行如下操作无数次 选定 A 中的 m 个数,将它们全部加 1
请问:能否经过若干次操作,将数组 A 变成回文的。
注意:当一个数组从左往右读,和从右往左读是一样的时候,我们称这个数组是回文的。比如 [ 4 , 10 , 10 , 4 ] [4,10,10,4] 和 [ 7 , 1 , 7 ] 是回文的 [7,1,7]是回文的
码风不太好请谅解。
#include <bits/stdc++.h>
#define int long long
using namespace std;
int t,n,m,a[1000010],sum=0,cha[1000010],cnt[1000010],cntall=0;
bool flag=1;
signed main(){
cin>>t;
while(t--){
memset(cha,0,sizeof(cha));
memset(a,0,sizeof(a));
flag=1;
sum=0;
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n/2;i++) cha[i]=abs(a[i]-a[n+1-i]);
for(int i=1;i<=n/2;i++) cnt[cha[i]]++;
for(int i=1;i<=1000000;i++) sum+=cnt[i]*i;
for(int i=1;i<=1000000;i++) cntall+=cnt[i];
for(int i=1;i<=1000000;i++) {
if(sum%m!=0&&m<cntall){
flag=0;
cout<<"NO"<<endl;
break;
}
}
if(flag) cout<<"YES"<<endl;
}
cout<<cntall<<" "<<sum;
return 0;
}