Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Sprawdzarka dla zadania "Klocki" XXI Olimpiady Informatycznej
- * @author: Artur Jamro "Mrowqa"
- * @version: 1.3
- */
- #include <fstream>
- #include <string>
- #include <vector>
- #include <iostream>
- #include <cstdlib>
- using namespace std;
- void loadAnswer(string filename, vector<int>& answer);
- void countNumbers(const vector<int>& numbers, vector<int>& out);
- int main(int argc, char* argv[])
- {
- if(argc < 3)
- {
- cout << "usage: klochk <test.out> <correct.out>\n";
- return 2;
- }
- string testOut(argv[1]);
- string correctOut(argv[2]);
- vector<int> testAnswer;
- vector<int> correctAnswer;
- testAnswer.reserve(1000000);
- correctAnswer.reserve(1000000);
- loadAnswer(testOut, testAnswer);
- loadAnswer(correctOut, correctAnswer);
- if(testAnswer.size() != correctAnswer.size())
- {
- cout << "ZLE! Rozna liczba klockow!\n";
- return 1;
- }
- if( testAnswer[0] != correctAnswer[0] ||
- testAnswer[testAnswer.size()-1] != correctAnswer[correctAnswer.size()-1])
- {
- cout << "ZLE! Skrajne elementy sie roznia!\n";
- return 1;
- }
- int last = -1;
- for(int elem : testAnswer)
- {
- if(elem == last)
- {
- cout << "ZLE! Klocki tego samego koloru jeden za drugim!\n";
- return 1;
- }
- last = elem;
- }
- vector<int> testNumCnt;
- vector<int> correctNumCnt;
- countNumbers(testAnswer, testNumCnt);
- countNumbers(correctAnswer, correctNumCnt);
- for(size_t i=0; i<testNumCnt.size(); i++)
- if(testNumCnt[i] != correctNumCnt[i])
- {
- cout << "ZLE! Rozne ilosci klockow tego samego koloru!\n";
- return 1;
- }
- cout << "OK";
- return 0;
- }
- void loadAnswer(string filename, vector<int>& answer)
- {
- fstream file(filename, ios_base::in);
- if(file.is_open())
- {
- answer.clear();
- int num;
- while(!file.eof())
- {
- file >> num;
- if(!file) break;
- answer.push_back(num);
- }
- }
- else
- {
- cerr << "Nie mozna otworzyc pliku: " << filename << "!\n";
- exit(1);
- }
- }
- void countNumbers(const vector<int>& numbers, vector<int>& out)
- {
- out = vector<int>(1000000, 0);
- for(auto elem : numbers)
- out[elem]++;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement