01/10/2018, 12:35

Tìm phần dư lớn nhất của 1 dãy con trong 1 tập số với 1 số cho trước

Đề bài là cho một dãy A có n số và 1 số m bất kì. Một dãy con của A là một dãy chứa các phần tử liên tiếp từ i đến j của A. Cho số nguyên m tìm một dãy con của A có phần dư của tổng các phần tử của dãy con đó với m là lớn nhất. Đây là code của e nhưng ko được tối ưu lắm, các tiền bối có phương pháp nào hay chỉ e với ạ

#include<stdio.h>

int main()
{
    long int n,m,mod,num[100000];
    long int max_mod = 0, sum = 0;
    scanf("%ld %ld",&n,&m);
    long int pos = n-1;
  
    for(long int i=0;i<n;i++)
    {
        scanf("%ld",&num[i]);
    }
    for(long int i=0;i<n-1;i++)
    {
        while(pos>i)
        {
            for(long int j=i;j<pos+1;j++)
            {
                sum += num[j];
            }
            mod = sum%m;
            if(mod>max_mod)
            {
                max_mod = mod;
            }
            pos--;
        }
        pos = n-1;
        sum = 0;
    }
    printf("%ld",max_mod);
}
Bài liên quan
0