Pagini recente » Cod sursa (job #1123031) | Cod sursa (job #2538870) | Cod sursa (job #657455) | Cod sursa (job #328627) | Cod sursa (job #196379)
Cod sursa(job #196379)
#include <stdio.h>
#include <map>
using namespace std;
#define MP make_pair
#define ff first
#define ss second
#define NMAX 1010
int N;
int nr[4];
map <pair<int, int>, int> ant;
map <pair<int, int>, int> cur;
int get_nr(int x, int p)
{
int rez = 0;
while (x % p == 0) {
rez++;
x /= p;
}
return rez;
}
int main()
{
int i, a, b, c;
freopen("aliens.in", "r", stdin);
// freopen("aliens.out", "w", stdout);
scanf("%d", &N);
ant[MP(0, 0)] = 0;
cur[MP(0, 0)] = 0;
map <pair<int, int>, int> :: iterator it, it1;
N = 50;
for (i = 1; i <= N; i++) {
//scanf("%d %d", &a, &b);
nr[0] = rand() % 20 - 10; nr[1] = rand() % 20 - 10; nr[2] = rand() % 20 - 10;
// nr[0] = get_nr(a, 2) - get_nr(b, 2);
// nr[1] = get_nr(a, 3) - get_nr(b, 3);
// nr[2] = get_nr(a, 5) - get_nr(b, 5);
for (it = ant.begin(); it != ant.end(); ++it) {
a = it->ff.ff; b = it->ff.ss; c = it->ss;
a += nr[1]; b += nr[2]; c += nr[0];
if ((it1 = cur.find(MP(a, b))) == cur.end()) cur[MP(a, b)] = c;
else if (c > it1->ss) cur[MP(a, b)] = c;
}
ant = cur;
for (it = ant.begin(); it != ant.end(); ++it) {
a = it->ff.ff; b = it->ff.ss; c = it->ss;
if (a + 20 * (N - i) < 0 || b + 20 * (N - i) < 0 || c + 20 * (N - i) < 0) cur.erase(MP(a, b));
}
ant = cur;
}
for (it = ant.begin(); it != ant.end(); ++it) {
a = it->ss; b = it->ff.ff; c = it->ff.ss;
// printf("%d %d %d\n", a, b, c);
}
return 0;
}