Cod sursa(job #744054)

Utilizator padreatiAurelian Tutuianu padreati Data 7 mai 2012 10:45:41
Problema Elementul majoritar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stack>
#include <cstdlib>
#include <vector>
#include <algorithm>

using namespace std;

void sol();
int main() {
#ifdef PADREATI
    freopen("source.in", "r", stdin);
#else
    freopen("inel.in", "r", stdin);
    freopen("inel.out", "w", stdout);
#endif
    sol();
    return 0;
}


#define ull unsigned long long
#define N 18
#define PN 100

int n;
int hit[N+1];
int p[PN];
int g[N+1][N+1];
int len[N+1];

int bt(int pos, int level) {

    if(level==n) return !p[pos+1] ? 1 : 0;

    int sol = 0;
    hit[pos]=true;
    for(int i=0; i<len[pos]; i++) {
        int next = g[pos][i];
        if(!hit[next]) {
            sol+=bt(next, level+1);
        }
    }
    hit[pos]=false;
    return sol;
}

void sol() {
    scanf("%d", &n);
    for(int i=0; i<PN; i++) {
        hit[i]=false;
        p[i]=0;
    }
    for(int i=2; i<PN; i++) {
        if(p[i]==0) {
            for(int j=2*i; j<PN; j+=i) {
                p[j]=1;
            }
        }
    }
    for (int i=1; i<=n; i++) {
        for(int j=i+1; j<=n; j++) {
            if(!p[i+j]) {
                g[i][len[i]++]=j;
                g[j][len[j]++]=i;
            }
        }
    }
    ull sol = bt(1, 1);
    printf("%llu\n", sol);
}