hdu 4648
求一个数列中 去掉一些连续的数之后 不改变对m取余后的值
就是求一个最长的连续子序列 对m取余后为0
我的方法可能比较水
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include <cmath>
#include <set>
#include <cstring>
#include <algorithm>
#define maxn 100010
using namespace std;
int a[maxn];
int main()
{
int m,n;
while(scanf("%d%d",&n,&m) == 2)
{
memset(a, 0, sizeof(a));
for(int i = 1 ; i <= n; i++)
{
scanf("%d",&a[i]);
a[i] += a[i-1];
a[i] %= m;
}
int _max = 0;
for(int i = 0; i <= n; i++)
{
for(int j = n; j > i; j--)
{
if((a[j] - a[i])%m == 0)
{
if(j - i > _max)
{
_max = j - i;
break;
}
}
if(j - i < _max)
break;
}
}
printf("%d\n",_max);
}
return 0;
}

浙公网安备 33010602011771号