UVa Problem Solution: 10188 - Automated Judge Script

来源:互联网 发布:js 键值对 编辑:程序博客网 时间:2024/04/29 23:07

Not a difficult problem. Just catenate the lines together and compare the correct and submitted answer will do it well. Unfortunately, the problem statement is misleading: I get WA consistently with a "linesize" of 102, however, it becomes AC when I switch to 110.

Code:
  1. /*************************************************************************
  2.  * Copyright (C) 2008 by liukaipeng                                      *
  3.  * liukaipeng at gmail dot com                                           *
  4.  *************************************************************************/
  5. /* @JUDGE_ID 00000 10188 C++ "Automated Judge Script" */
  6. #include <cstdlib>
  7. #include <iostream>
  8. #include <fstream>
  9. #include <string>
  10. #include <vector>
  11. using namespace std;
  12.      
  13. int const linecount = 100;
  14. int const linesize = 110;
  15.           
  16. int judge(char *correct, int ncorrect, char *submit, int nsubmit)
  17. {
  18.   int result = 0;
  19.   if (ncorrect != nsubmit) {
  20.     result = 1;
  21.   }
  22.   int p = 0;
  23.   if (result == 0) {
  24.     for (; correct[p] != '/0' || submit[p] != '/0'; ++p) {
  25.       if (correct[p] != submit[p]) {
  26.         result = 1;
  27.         break;
  28.       }
  29.     }
  30.   }
  31.   int c = p, s = p;
  32.   if (result == 1) {
  33.     for (; correct[c] != '/0' || submit[s] != '/0'; ) {
  34.       for (; correct[c] != '/0' && !isdigit(correct[c]); ++c) {}
  35.       for (; submit[s] != '/0' && !isdigit(submit[s]); ++s) {}
  36.       if (correct[c++] != submit[s++]) {
  37.         result = 2;
  38.         break;
  39.       }
  40.     }
  41.   }
  42.   return result;
  43. }
  44. int main(int argc, char *argv[])
  45. {
  46. #ifndef ONLINE_JUDGE
  47.   filebuf in, out;
  48.   cin.rdbuf(in.open((string(argv[0]) + ".in").c_str(), ios_base::in));
  49.   cout.rdbuf(out.open((string(argv[0]) + ".out").c_str(), ios_base::out));
  50. #endif
  51.   char const *results[] = {
  52.     "Accepted",
  53.     "Presentation Error",
  54.     "Wrong Answer",
  55.   };
  56.   for (int run = 1; ; ++run) {
  57.     char buf[10];
  58.     cin.getline(buf, 10);
  59.     int ncorrect = atoi(buf);
  60.     if (0 == ncorrect) {
  61.       break;
  62.     }
  63.     char correct[linecount*linesize] = {0};
  64.     for (int i = 0, pos = 0; i < ncorrect; ++i, pos += cin.gcount()-1) {
  65.       cin.getline(correct + pos, linesize);
  66.     }
  67.     cin.getline(buf, 10);
  68.     int nsubmit = atoi(buf);
  69.     char submit[linecount*linesize] = {0};
  70.     for (int i = 0, pos = 0; i < nsubmit; ++i, pos += cin.gcount()-1) {
  71.       cin.getline(submit + pos, linesize);
  72.     }
  73.     int result = judge(correct, ncorrect, submit, nsubmit);
  74.     cout << "Run #" << run << ": " << results[result] << "/n";
  75.   }
  76.   return 0;
  77. }

原创粉丝点击