站外题求调
  • 板块学术版
  • 楼主coderJerry
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/26 22:13
  • 上次更新2023/11/27 13:26:51
查看原帖
站外题求调
953589
coderJerry楼主2023/11/26 22:13

给你一个长度为 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;
}
2023/11/26 22:13
加载中...