Advertisement
TrickmanOff

checker v2

Aug 11th, 2019
301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.85 KB | None | 0 0
  1. #include <stdio.h>
  2. #pragma optimization_level 3
  3. #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3")
  4. #include <iostream>
  5. #include <fstream>
  6. #include <iostream>
  7. #include <vector>
  8. #include <algorithm>
  9. #include <functional>
  10. #include <bitset>
  11. #include <string>
  12. #include <stack>
  13. #include <time.h>
  14. #include <random>
  15. #include <unordered_set>
  16. #include <queue>
  17. using namespace std;
  18.  
  19. #define ll long long
  20. //#define cin in
  21. //#define cout out
  22. #define pii pair<int, int>
  23. #define ld long double
  24. #define u_set unordered_set
  25. #define uid uniform_int_distribution
  26.  
  27. ifstream in("input.txt");
  28. ofstream out("output.txt");
  29. int sz = 0, n, w;
  30. const int TREE_SZ = 524288;
  31. int tree[TREE_SZ];
  32.  
  33. vector<int> queries;
  34.  
  35. void update(int v, int val, int lb, int rb, int &ans) {
  36.     if(tree[v] < val) {
  37.         ans = -1;
  38.         return;
  39.     }
  40.    
  41.     if(lb == rb) {
  42.         tree[v] -= val;
  43.         ans = lb+1;
  44.         return;
  45.     }
  46.    
  47.     int mid = (lb + rb)/2;
  48.    
  49.     if(tree[2*v] >= val)
  50.         update(2*v, val, lb, mid, ans);
  51.     else
  52.         update(2*v+1, val, mid+1, rb, ans);
  53.    
  54.     tree[v] = max(tree[2*v], tree[2*v+1]);
  55. }
  56.  
  57. int update(int val) {
  58.     int ans;
  59.     update(1, val, 0, sz-1, ans);
  60.     return ans;
  61. }
  62.  
  63. vector<int> my_ans;
  64. /*
  65.  checker
  66.  */
  67. vector<int> right_ans;
  68.  
  69. void rand_gen() {
  70.     sz = rand() % 10 + 1;
  71.     w = rand() % 10 + 1;
  72.     n = rand() % 5 + 1;
  73.    
  74.     right_ans = vector<int> ();
  75.     my_ans = vector<int> ();
  76.    
  77.    
  78.     fill(tree, tree+TREE_SZ, 0);
  79.     queries = vector<int> (n);
  80.    
  81.     for(int i = 0; i < n; i++)
  82.         queries[i] = rand() % 10 + 1;
  83. }
  84.  
  85. void solve() {
  86.     vector<int> sheet(sz, w);
  87.     for(int i = 0; i < n; i++) {
  88.         int cur_w = queries[i];
  89.        
  90.         int ans = -1;
  91.         for(int j = 0; j < sz; j++) {
  92.             if(sheet[j] >= cur_w) {
  93.                 sheet[j] -= cur_w;
  94.                 ans = j+1;
  95.                 break;
  96.             }
  97.         }
  98.        
  99.         right_ans.push_back(ans);
  100.     }
  101. }
  102.  
  103. void print_cond () {
  104.     cout << sz << ' ' << w << ' ' << n << '\n';
  105.     for(int x: queries)
  106.         cout << x << '\n';
  107. }
  108.  
  109.  
  110. void my_sol() {
  111.     fill(tree, tree + 2*sz+1, w);
  112.     for(int x: queries)
  113.         my_ans.push_back(update(x));
  114. }
  115.  
  116. int main()
  117. {
  118.     int k = 10000;
  119.     srand(time(0));
  120.     while(k--) {
  121.         rand_gen();
  122.         solve();
  123.         my_sol();
  124.        
  125.         //print_cond();
  126.         if(k % 1000 == 0)
  127.             cout << '-';
  128.         if(my_ans != right_ans) {
  129.             cout << "\nBAD\n";
  130.             print_cond();
  131.             exit(0);
  132.         }
  133.     }
  134.     //input();
  135.     //gen();
  136. }
  137.  
  138. /*
  139. int main()
  140. {
  141.     int w, n;
  142.     cin >> sz >> w >> n;
  143.    
  144.     fill(tree, tree + 2*sz+1, w);
  145.     while(n--) {
  146.         int a;
  147.         cin >> a;
  148.        
  149.         cout << update(a) << '\n';
  150.     }
  151. }
  152. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement