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 }

 

posted @ 2020-07-16 16:36  kongbursi  阅读(125)  评论(0编辑  收藏  举报