void insert(const SPIID & x) { #ifdef SPIIDSET_USE_SET d_data.insert(x); #else d_data.push_back(x); #endif };
void ProcessFile(const string &filein) { ifstream in; in.open(filein); string str; while(!in.eof()) { getline(in,str); if(str.find("#include ") == str.npos) continue; string s = str.substr(10,str.size() - 11); if(!headfile.count(s)); { headfile.push_back(s); ProcessFile(s); } else throw "Self-referential includes is detected:"<<s<<endl; }
//with repeat void permuteRepate2(char *s, int swapIndex, int end) { // printf("%d %d\n", swapIndex, end); if(swapIndex == end) { if(stringPermute.find()) { sums++; printf("%s\n", s); char *news = new char[N]; memcpy(news, s, N*sizeof(char)); stringPermute.push_back(news); } return; } for (int i = swapIndex; i <= end; ++i) { swap(s[i], s[swapIndex]); permute(s, swapIndex+1, end); swap(s[i], s[swapIndex]); } }
int main(int argc, char* argv[]) { setName("Scheduler"); registerInteraction(argc, argv); int problemCount = inf.readInt(); int invokerCount = inf.readInt(); invokerFreeTime.clear(); for (int i = 0; i < invokerCount; i++) { invokerFreeTime.push_back(0); } printf("%d\n", invokerCount); problems.resize(problemCount); for (int i = 0; i < problemCount; i++) { int timeLimit = inf.readInt(); int testCount = inf.readInt(); if (testCount < 1) testCount = 1; problems[i] = Problem(timeLimit, testCount); } printf("%d\n", problemCount); for (int i = 0; i < problemCount; i++) { printf("%d %d\n", problems[i].timeLimit, problems[i].testCount); } fflush(stdout); submissions.clear(); while (true) { int submitTime = inf.readInt(); if (submitTime == -1) break; int problemId = inf.readInt(); vector<Verdict> verdicts; while (true) { int timeConsumed = inf.readInt(); if (timeConsumed == -1) break; string verdictString = inf.readToken(); Verdict verdict; verdict.timeConsumed = timeConsumed; verdict.passed = verdictString == "OK"; verdicts.push_back(verdict); } if (!submissions.empty()) assert(submissions.back().submitTime <= submitTime); submissions.push_back(Submission(submitTime, problemId, verdicts)); } finishedCount = 0; int submissionIndex = 0; for (currentTime = 0; finishedCount != int(submissions.size()); currentTime += TIME_STEP) { while (submissionIndex < int(submissions.size()) && submissions[submissionIndex].submitTime <= currentTime) { Submission& submission = submissions[submissionIndex]; printf("%d\n", submission.problemId); submission.startTime = currentTime; submissionIndex++; } puts("-1"); while (!verdicts.empty() && verdicts.begin()->first.first <= currentTime) { submissions[verdicts.begin()->second.first].judged[verdicts.begin()->second.second] = true; checkFinished(submissions[verdicts.begin()->second.first]); printf("%d %d %s\n", verdicts.begin()->second.first, verdicts.begin()->second.second, verdicts.begin()->first.second ? "OK" : "RJ"); verdicts.erase(verdicts.begin()); } puts("-1 -1"); fflush(stdout); if (!readOperations() && finishedCount != int(submissions.size())) { quitf(_wa, "Unexpected eof, not all submissions were judged"); } } const double k = 3; double sumK = 0; for (int i = 0; i < submissions.size(); i++) { const Submission& submission = submissions[i]; int judgeTime = submission.timeConsumed; sumK += pow(judgeTime, k); } tout << int(pow(sumK / submissions.size(), 1 / k)) << endl; // just message quitf(_ok, "Finished in %d ms", currentTime); }