k序列(暴力取模)

链接:https://www.nowcoder.com/acm/contest/91/L
来源:牛客网

给一个数组 a,长度为 n,若某个子序列中的和为 K 的倍数,那么这个序列被称为“K 序列”。现在要你 对数组 a 求出最长的子序列的长度,满足这个序列是 K 序列。 

输入描述:

第一行为两个整数 n, K, 以空格分隔,第二行为 n 个整数,表示 a[1] ∼ a[n],1 ≤ n ≤ 10

5

 , 1 ≤ a[i] ≤ 10

9

 , 1 ≤ nK ≤ 10

7

输出描述:

输出一个整数表示最长子序列的长度 m

示例1

输入

7 5
10 3 4 2 2 9 8

输出

6
思路很简单暴力枚举,注意取模即可
#include <iostream>  
using namespace std;  
  
  
    int resolution(long long int *p, int n,int k)  
    {  
        long long int sum = 0;  
        for (int i = 0; i < n; i++)  
        {  
            sum = (sum+p[i])%k;  
        }  
  
        if (sum%k == 0)  
        {  
            return n;  
        }  
  
        for (int i = n-1; i > 0; i--)  
        {  
            sum = 0;  
            for (int ii = 0; ii < i; ii++)  
            {  
                sum =(sum+ p[ii])%k; 
            }  
            if (sum%k == 0)  
                return i;  
            for (int j = 0; j < n-i; j++)  
            {  
                sum = (sum - p[j] + p[j + i])%k;  
                if (sum%k == 0)  
                    return i;  
            }  
  
        }  
  
        return 0;  
    }  
  
int main()  
{  
    int n, k;  
    while (cin >> n)  
    {  
        long long int p[100005] ;
        cin>>k;
        for (int i = 0; i < n; i++)  
        {  
            cin >> p[i];  
        }   
        cout << resolution(p, n, k) << endl; 
    }  
    return 0;  
} 

 

posted on 2018-04-15 15:27  horsesea  阅读(374)  评论(0)    收藏  举报