题意:这个题让你找从开头或者是结尾去掉最少几个数以后总和是不能整除给定的x
思路:如果这个序列总和可以整除给定的x的话,那么我们只要找到一个数可以不被x整除,把他从序列中取出,那么序列中剩余的总和也就不能被整除了。
分别从前从后开始搜索即可:
/*Keep on going Never give up*/ #pragma GCC optimize(3,"Ofast","inline") #include <bits/stdc++.h> const int maxn = 1e5+10; const int MaxN = 0x3f3f3f3f; const int MinN = 0xc0c0c00c; typedef long long ll; const int mod = 100000000; using namespace std; int a[maxn]; int main() { int t; cin>>t; while(t--){ int n,k; cin>>n>>k; ll ans=0; for(int i=0;i<n;i++) scanf("%d",&a[i]),ans+=a[i]; int pos1=n-1,pos2=0; if(ans%k==0){ for(int i=0;i<n;i++){ if(a[i]%k!=0&&a[i]!=0){ pos1=i; break; } } for(int i=n-1;i>=0;i--){ if(a[i]%k!=0&&a[i]!=0){ pos2=i; break; } } //cout<<pos1<<" "<<pos2<<endl; int ans=min(pos1+1,n-pos2); if(ans==n) cout<<-1<<endl; else printf("%d\n",n-ans); } else cout<<n<<endl; } return 0; }