CodeChef submission 773948 (C++ 4.3.2) plaintext list. Status: WA, problem CIELWALK, contest . By hex539 (hex539), 2012-01-01 01:54:25.
#include <cstdio> #include <vector> using namespace std; #define double long double #define fort(i) for (int i=T; i--;) #define fork(i,n) for (int i=n; i--;) int const T=72; inline void to_infinity(double mat[T][T]){ static double tmp[T][T]; double want=0.0; fort(i) fort(j) want+=mat[i][j]; fork(z,120){ double sum=0.0L; fort(i) fort(j) tmp[i][j]=mat[i][j], mat[i][j]=0.0; fort(i) fort(j) fort(k) mat[j][k]+=tmp[j][i]*tmp[i][k]; fort(i) fort(j) sum+=mat[i][j]; fort(i) fort(j) mat[i][j]*=want/sum; } } vector<int> edge[1000]; bool flower[1000]={}; int flow[1000]; int flows=0; int main(){ #ifdef twentyone #endif int a,b; for (int i=0; i<s; i++){ flow[i]=a; ++flows; } for (int i=0; i<m; i++){ edge[--a].push_back(--b); } edge[n-1].resize(1); edge[n-1][0]=n-1; double prob[T][T]={}; fork(i,n) fork(j,n) prob[i][j]=(i==j and (flower[i] or i+1==n)); fork(i,n) if (not flower[i]) fork(j,edge[i].size()) prob[i][edge[i][j]]+=1.0/(double)edge[i].size(); to_infinity(prob); double pron[T][T]={}; fort(i) fort(j) pron[i][j]=prob[i][j], prob[i][j]=0.0L; fort(i) fort(j) fork(k,edge[i].size()) prob[i][j]+=pron[edge[i][k]][j]/(double)edge[i].size(); fork(i,n) if (flower[i]) prob[i][i+n]+=prob[i][n-1], prob[i][n-1]=0.0L, prob[i+n][i+n]=1.0L; to_infinity(prob); for (int i=0; i<flows; i++) }
Comments

