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;
}


posted @ 2013-08-06 21:07  xlc2845  阅读(117)  评论(0)    收藏  举报