Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
第50题留念此题参考了标程才通过,贴出代码与大家分享: Memory: 172K Time: 0MS Language: C++ Result: Accepted Source Code #include <stdio.h> #include <string.h> char g[120][120], m[30], f[300]; int opd[50]; char* genFormula(int row, int col, char* fp) { char op, ch; op = g[row][col]; g[row][col] = '*'; //inversion if(op == 'o') { fp = genFormula(row, col-1, fp); *fp++ = op; return fp; } //AND or OR gate if(op=='>' || op==')') { fp = genFormula(row-1, col-1, fp); fp = genFormula(row+1, col-1, fp); *fp++ = op; return fp; } //input if(op>='A' && op<='Z') { *fp++ = op; return fp; } //try up if(g[row-1][col]!=' ' && g[row-1][col]!='*') { ch = g[row-1][col]; while(ch == '|') { g[row---1][col] = '*'; ch = g[row-1][col]; } fp = genFormula(row-1, col, fp); } //try down if(g[row+1][col]!=' ' && g[row+1][col]!='*') { ch = g[row+1][col]; while(ch == '|') { g[row+++1][col] = '*'; ch = g[row+1][col]; } fp = genFormula(row+1, col, fp); } //try left if(g[row][col-1]!=' ' && g[row][col-1]!='*') { ch = g[row][col-1]; while(ch == '-') { g[row][col---1] = '*'; ch = g[row][col-1]; } fp = genFormula(row, col-1, fp); } //try right if(g[row][col+1]!=' ' && g[row][col+1]!='*') { ch = g[row][col+1]; while(ch == '-') { g[row][col+++1] = '*'; ch = g[row][col+1]; } fp = genFormula(row, col+1, fp); } return fp; } int logicValue() { int top = 0; char *fp = f; char ch; while(ch = *fp++) { if(ch>='A' && ch<='Z') opd[top++] = m[ch-'A'] - '0'; else if(ch == 'o') opd[top-1] = !opd[top-1]; else if(ch == '>') { --top; opd[top-1] |= opd[top]; } else if(ch == ')') { --top; opd[top-1] &= opd[top]; } } return opd[top-1]; } int main() { char ch; int r, c, row, col; while(true) { row = col = -1; memset(g, ' ', sizeof(g)); memset(f, 0, sizeof(f)); //read circuit for(r=1; ;++r) { ch = getchar(); if(ch==EOF || ch=='*') break; c = 0; while(ch != '\n') { g[r][++c] = ch; if(row<0 && ch=='?') { row = r; col = c; } ch = getchar(); } } //end of file if(ch == EOF) break; //generate formula genFormula(row, col, f); //read input while(scanf("%s", m) == 1) { getchar(); if(m[0] == '*') break; //logical operation printf("%d\n", logicValue()); } putchar('\n'); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator