随机算法
查看原帖
随机算法
1037607
wangyuyan1楼主2025/7/29 14:36
#include <bits/stdc++.h>

using namespace std;
const int N=10010;
int a[N],n,m,k,s[N];
int mod(int x){
    if(x>=0)return x%k;
    return k-(-x)%k;
}
int main()
{
    cin>>m;
    while(m--){
        cin>>n>>k;
        s[0]=0;
        bool flag=false;
        for(int i=1;i<=n;i++){
            cin>>a[i];
            a[i]=mod(a[i]);
        }
        sort(a+1,a+1+n);
        for(int i=1;i<=n;i++){
            s[i]=s[i-1]+a[i];
        }
        for(int i=n;i>=1;i--){
            if(!mod(s[i]-(s[n]-s[i]))){
                flag=true;
                break;
            }
        }
        reverse(a+1,a+1+n);
        for(int i=1;i<=n;i++){
            s[i]=s[i-1]+a[i];
        }
        for(int i=n;i>=1;i--){
            if(!mod(s[i]-(s[n]-s[i]))){
                flag=true;
                break;
            }
        }
        for(int i=1;i<=10;i++){
        random_shuffle(a+1,a+1+n);
        for(int i=1;i<=n;i++){
            s[i]=s[i-1]+a[i];
        }
        for(int i=n;i>=1;i--){
            if(!mod(s[i]-(s[n]-s[i]))){
                flag=true;
                break;
            }
        }}
        if(flag){
            cout<<"Divisible"<<endl;
        }else{
            cout<<"Not divisible"<<endl;
        }
    }
    return 0;
}

这代码AC 无敌的运气

2025/7/29 14:36
加载中...