Cod sursa(job #18547)

Utilizator tvladTataranu Vlad tvlad Data 18 februarie 2007 12:35:30
Problema Tricouri Scor 30
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasa a 9-a si gimnaziu Marime 0.92 kb
#include <cstdio>
#include <algorithm>
using namespace std;

const int N = 300000;
int n,m;
int a[N];
int k,p;
int s,sm;
bool killback;

bool comp ( int a, int b ) {
    return (a > b);
}

void back ( int lvl, int prev ) {
    for (int i = prev + 1; i < n; ++i) {
        s += a[i];
        if (lvl == k-1) {
            if (s > sm && s % p == 0) {
                sm = s;
                killback = true;
                return;
            }
        } else {
            back(lvl+1,i);
            if (killback) return;
        }
        s -=a[i];
    }
}

int main() {
    freopen("tricouri.in","r",stdin);
    freopen("tricouri.out","w",stdout);
    int m;
    scanf("%d %d",&n,&m);
    for (int i = 0; i<n; i++) {
        scanf("%d",&a[i]);
    }
    sort(a,a+n,comp);
    for (; m>0; --m) {
        scanf("%d %d",&k,&p);
        sm = -1; s = 0;
        killback = false;
        back(0,-1);
        printf("%d\n",sm);
    }
    return 0;
}