// @BEGIN_OF_SOURCE_CODE /* @JUDGE_ID: 17243NT 189 C++ "Pascal is strange" */ #include #include #include #ifdef ONLINE_JUDGE #define ins cin #define outs cout #else #define ins fin #define outs fout ifstream fin("myprog.in"); ofstream fout("myprog.out"); #endif #define MAXLEN 10000 #define isnum(a) (a >= '0' && a <= '9') #define isalpha(a) ((a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z')) #define ishex(a) ((a >= 'a' && a <= 'f') || (a >= 'A' && a <= 'F') || isnum(a)) int main() { char line[MAXLEN + 1]; int n, l, c; while(!ins.eof()) { n = 0; for(;;) { ins.getline(line, MAXLEN); if(ins.eof()) break; l = strlen(line); if(l >= 2 && line[0] == '~' && line[1] == '~') { outs << "Program by " << &line[2] << " contains " << n << " units.\n"; break; } c = 0; while(c < l) { if(isalpha(line[c]) || line[c] == '_') { n++; while(c < l && (isalpha(line[c]) || isnum(line[c]) || line[c] == '_')) c++; } else if(line[c] == '+' || line[c] == '-' || line[c] == '*' || line[c] == '/' || line[c] == '=' || line[c] == '@' || line[c] == '^' || line[c] == '[') { n++; c++; } else if(line[c] == '<') { n++; c++; if(c < l && (line[c] == '>' || line[c] == '=')) c++; } else if(line[c] == '>') { n++; c++; if(c < l && line[c] == '=') c++; } else if(line[c] == ':') { c++; if(c < l && line[c] == '=') { c++; n++; } } else if(line[c] == '{') { c++; while(c < l && line[c] != '}') c++; if(c >= l) { for(;;) { ins.getline(line, MAXLEN); if(ins.eof()) break; l = strlen(line); while(c < l && line[c] != '}') c++; if(c < l) break; } } } else if(line[c] == '(') { c++; if(c < l && line[c] == '*') { while(c < l - 1 && line[c] != '*' && line[c + 1] != ')') c++; if(c >= l - 1) { for(;;) { ins.getline(line, MAXLEN); if(ins.eof()) break; l = strlen(line); while(c < l - 1 && line[c] != '*' && line[c + 1] != ')') c++; if(c < l - 1) { c++; break; } } } else { c++; } } else { n++; } } else if(line[c] == '\'') { n++; c++; for(;;) { if(c >= l) break; if(line[c] == '\'') { c++; if(c < l && line[c] == '\'') { c++; continue; } else { break; } } c++; } } else if(line[c] == '$') { n++; while(c < l && ishex(line[c])) c++; } else if(isnum(line[c])) { n++; while(c < l && isnum(line[c])) c++; if(line[c] == '.') c++; while(c < l && isnum(line[c])) c++; if(line[c] == 'E' || line[c] == 'e') { c++; while(c < l && line[c] == ' ') c++; if(line[c] == '+' || line[c] == '-') c++; while(c < l && line[c] == ' ') c++; while(c < l && isnum(line[c])) c++; } } else { c++; } } } } return 0; } // @END_OF_SOURCE_CODE