// UVa 10616 - Divisible Group Sums
#include <iostream>
#include <string.h>
using namespace std;
#define datatype signed long int
int main() {
int n, q, cases = 0;
cin >> n >> q;
while (n || q) {
cases++;
datatype a[201];
cout << "SET " << cases << ":" << endl;
for (int i = 0; i < n; i++)
cin >> a[i];
for (int qq = 1; qq <= q; qq++) {
int d, m;
cin >> d >> m;
int now = 0, b4 = 1;
unsigned long long int T[2][11][20];
memset(T, 0, sizeof(T));
T[now][0][0] = 1;
for (int i = 0; i < n; i++) {
now = b4;
b4 = (b4 + 1) % 2;
for (int j = 0; j <= m; j++)
for (int k = 0; k < d; k++)
T[now][j][k] = T[b4][j][k];
for (int j = 0; j < m; j++) {
for (int k = 0; k < d; k++) {
if (T[b4][j][k] != 0) {
int kk = (k + (a[i] % d) + d) % d;
T[now][j + 1][kk] += T[b4][j][k];
}
}
}
}
cout << "QUERY " << qq << ": " << T[now][m][0] << endl;
}
cin >> n >> q;
}
return 0;
}
Wednesday, August 26, 2015
UVa 10616 - Divisible Group Sums
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment