A题:
题意:给你一个数组,找到一个最长数列的和不能被x整除,该数列只能由原数列从第一个开始删除,或者从最后一个开始删除(必须连续删除)。
思路:直接设一个前缀和数组,循环一遍判断最大值就行了。如果全部元素都能被x整除,那就直接输出-1。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#define MAX 100005
typedef long long ll;
using namespace std;
int arr[MAX];
int pre[MAX];
int main()
{
int t;
cin >> t;
while(t--)
{
int n,x;
cin >> n >> x;
int flag=0;
int sum=0;
for(int i=0;i<n;i++)
{
scanf("%d",&arr[i]);
if(arr[i]%x!=0)
flag=1;
sum+=arr[i];
pre[i]=sum;
}
if(!flag)
{
cout << -1 <<endl;
continue;
}
if(sum%x!=0)
{
cout << n <<endl;
continue;
}
int ans=0;
for(int i=0;i<n;i++)
{
if(pre[i]%x!=0)
ans=max(ans,i+1);
if((pre[n-1]-