FACUP - The FA cup

Tác giả: skyvn97

Ngôn ngữ: C++

#include<algorithm>
#include<cstdio>
#define MAX   575
#define FOR(i,a,b) for (int i=(a);i<=(b);i=i+1)
#define REP(i,n) for (int i=0;i<(n);i=i+1)
using namespace std;
double p[MAX][MAX];
double f[MAX][MAX];
int ans[MAX];
const double eps=1e-9;
int n;
bool cmp(const int &i,const int &j) {
    if (f[i][n]>f[j][n]) return (true);
    if (f[j][n]>f[i][n]) return (false);
    return (i<j);
}
void init(void) {
    int t;
    scanf("%d",&n);
    REP(i,1<<n) REP(j,1<<n) {
        scanf("%d",&t);
        p[i][j]=1.0*t/100;
    }
}
void optimize(void) {
    REP(i,1<<n) f[i][0]=1.0;
    FOR(j,1,n) REP(i,1<<n) {
        int num=i/(1<<(j-1));
        if (num%2==0) num++; else num--;
        REP(k,1<<(j-1)) {
            int t=num*(1<<(j-1))+k;
            f[i][j]+=f[i][j-1]*f[t][j-1]*p[i][t];
        }
    }
}
void print(void) {
    REP(i,1<<n) ans[i]=i;
    sort(ans,ans+(1<<n),cmp);
    REP(i,1<<n) printf("%d\n",ans[i]+1);
}
int main(void) {
    init();
    optimize();
    print();
    return 0;
}

Download