P1356 新解
Summer_Sheep · · 个人记录
题意
给定一个长度为
分析
蒟蒻没想到背包 dp,于是自创了一个乱搞算法,但正确性好像是对的(
首先一个 trival 的结论是对于数列中的每一个数,我们都只关心其在模
之后我们将原数列的所有数模
于是考虑这个新结果能被
此时注意到新数列中每个数的最大值是
于是容易想到枚举每一个
时间复杂度
Code
#include<bits/stdc++.h>
#define int long long
using namespace std;
int T,n,a[10001],k;
void work(){
cin>>n>>k;
for(int i=1;i<=n;++i){
cin>>a[i];
a[i]=a[i]%k;
if(a[i]<0){
a[i]+=k;
}
}
sort(a+1,a+1+n);
for(int j=0;j<=n;++j){
int op=j*k;
int tmp=0;
for(int i=n;i>=1;--i){
if(tmp<=op){
tmp+=a[i];
}
else{
tmp-=a[i];
}
}
if(tmp%k==0){
cout<<"Divisible\n";
return;
}
}
cout<<"Not divisible\n";
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>T;
while(T--){
work();
}
return 0;
}