1. 程式人生 > 實用技巧 >Codeforces Round #649 (Div. 2) A. XXXXX

Codeforces Round #649 (Div. 2) A. XXXXX

題目連結:A、XXXXX

題意:

給你長度為n的陣列,你需要從中找到最長的子陣列(相當於子串得概念)。這個子陣列要保證它的所有元素的和不能被x整除。如果找不到就輸出-1

題解:

如果n個元素都可以被x整除,那就輸出-1

否則,如果n個元素的和不可以被整除就輸出n,否則我們只需要取 從開頭處找到距離陣列首部最近的那個不能被x整除的元素就可以了,從結尾處找到距離陣列尾部最近的那個不能被x整除的元素就可以了

中哪個元素距離陣列某一端更近的那個距離輸出就可

程式碼:

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<iostream>
 4
#include<string> 5 #include<queue> 6 #include<string.h> 7 #include<map> 8 #include <iostream> 9 #include <math.h> 10 using namespace std; 11 typedef long long ll; 12 const int maxn=1e5+10; 13 int n,m,v[maxn]; 14 int main() 15 { 16 int t; 17 scanf("%d",&t);
18 while(t--) 19 { 20 int sum=0,num=0; 21 scanf("%d%d",&n,&m); 22 for(int i=0;i<n;++i) 23 { 24 scanf("%d",&v[i]); 25 sum+=v[i]%m; 26 } 27 if(sum==0) 28 printf("-1\n"); 29 else if(sum%m) 30 {
31 printf("%d\n",n); 32 } 33 else 34 { 35 int l=0,r=n; 36 while(v[l]%m==0) l++; 37 while(v[r-1]%m==0) r--; 38 l++; 39 r--; 40 printf("%d\n",max(n-l,r)); 41 } 42 } 43 return 0; 44 }