Cod sursa(job #627991)

Utilizator idomiralinIdomir Alin idomiralin Data 31 octombrie 2011 10:43:25
Problema Divk Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
# include <stdlib.h>
# include <cstdio>

using namespace std;

int s[500005], deque[500005], val[500005];
int n, k, a, b, i, j, l, front, back, ct;
int main()
{
    freopen("divk.in","r",stdin);
    freopen("divk.out","w",stdout);
    
    scanf("%d%d%d%d",&n,&k,&a,&b);
    
    for (i = 1; i <= n; i++)
    {
        scanf("%d",&val[i]);
        s[i] = s[i - 1] + val[i];
        }
    
    front = 1; back = 0;
    for (i = a; i <= b; i++)
    {
        if (s[i] % k == 0) 
        {
                 ct++; 
                 for (j = 1; j <= i; j++) 
                 printf("%d ",val[j]);
                 printf("\n");
                 }
        else deque[++back] = i;
        }
        
    for (i = 2; i + a - 1 <= n; i++)
    {
        while (front <= back && i + a - 1 > deque[front])
        front++;
        
        if (i + b - 1 <= n)
            deque[++back] = i + b - 1;
           
           
        for (l = 1; l < b; l++)  
        if ((s[deque[front]] - s[i - l]) % k == 0 && i - l > 0)
           {
                  ct++; 
                  for (j = i - l + 1; j <= deque[front]; j++) 
                  printf("%d ",val[j]);
                  printf("\n");
                  }
        
        }
           
    printf("%d",ct);
    
return 0;
}