Alex_tz307

School-CCC Track the cars - Level 3 - BAD

Oct 28th, 2020
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.46 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. ifstream fin("text.in");
  6. ofstream fout("text.out");
  7.  
  8. struct observator {
  9.     string id, time, latitiude, longitude;
  10. };
  11.  
  12. struct rectangle {
  13.     string x2, y2, x1, y1;
  14. };
  15.  
  16. bool bigger(string s, string t) {
  17.     string S, T;
  18.     int ps = 0, pt = 0;
  19.     while(ps < (int)s.size() && isdigit(s[ps]))
  20.         S.push_back(s[ps++]);
  21.     while(pt < (int)t.size() && isdigit(t[pt]))
  22.         T.push_back(t[pt++]);
  23.     if(S.size() > T.size())
  24.         return true;
  25.     if(S.size() < T.size())
  26.         return false;
  27.     int dim = S.size();
  28.     int p = 0;
  29.     while(p < dim && S[p] == T[p])
  30.         ++p;
  31.     if(p != dim)
  32.         return S[p] > T[p];
  33.     ++ps, ++pt;
  34.     S.clear(), T.clear();
  35.     while(ps < (int)s.size() && isdigit(s[ps]))
  36.         S.push_back(s[ps++]);
  37.     while(pt < (int)t.size() && isdigit(t[pt]))
  38.         T.push_back(t[pt++]);
  39.     dim = min(S.size(), T.size());
  40.     p = 0;
  41.     while(p < dim && S[p] == T[p])
  42.         ++p;
  43.     if(p != dim)
  44.         return S[p] > T[p];
  45.     return S.size() > T.size();
  46. }
  47.  
  48. int main() {
  49.     string s;
  50.     fin >> s;
  51.     int p = 0;
  52.     rectangle r;
  53.     while(isdigit(s[p]) || s[p] == '.')
  54.         r.x2.push_back(s[p++]);
  55.     ++p;
  56.     while(isdigit(s[p]) || s[p] == '.')
  57.         r.y2.push_back(s[p++]);
  58.     ++p;
  59.     while(isdigit(s[p]) || s[p] == '.')
  60.         r.x1.push_back(s[p++]);
  61.     ++p;
  62.     while(isdigit(s[p]) || s[p] == '.')
  63.         r.y1.push_back(s[p++]);
  64.     // fout << r.x2 << ' ' << r.y2 << ' ' << r.x1 << ' ' << r.y1 << endl;
  65.     int N;
  66.     fin >> N;
  67.     vector < observator > a(N);
  68.     map < string , bool > sol;
  69.     for(auto& x : a) {
  70.         fin >> s;
  71.         int p = 0;
  72.         while(isalnum(s[p]) || s[p] == '-')
  73.             x.id.push_back(s[p++]);
  74.         ++p;
  75.         while(isdigit(s[p]) || s[p] == ':')
  76.             x.time.push_back(s[p++]);
  77.         ++p;
  78.         while(isdigit(s[p]) || s[p] == '.')
  79.             x.latitiude.push_back(s[p++]);
  80.         ++p;
  81.         while(isdigit(s[p]) || s[p] == '.')
  82.             x.longitude.push_back(s[p++]);
  83.         // fout << x.id << ' ' << x.time << ' ' << x.latitiude << ' ' << x.longitude << endl;
  84.         if(bigger(r.x2, x.latitiude) && bigger(x.latitiude, r.x1) && bigger(r.y2, x.longitude) && bigger(x.longitude, r.y1))
  85.             sol[x.id] = true;
  86.     }
  87.     int cnt = 0;
  88.     for(auto x : sol) {
  89.         ++cnt;
  90.         if(cnt > 1)
  91.             fout << ',';
  92.         fout << x.first;
  93.     }
  94. }
  95.  
Advertisement
Add Comment
Please, Sign In to add comment