Pagini recente » Cod sursa (job #161037) | Cod sursa (job #1878604) | Cod sursa (job #194576) | Cod sursa (job #2221224) | Cod sursa (job #18547)
Cod sursa(job #18547)
#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;
}