Advertisement
FuFsQ

йцукцукцукцук

Sep 30th, 2018
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. using namespace std;
  5.  
  6. int bf(vector<int> &c, int val){
  7.     int L = 0, R = c.size(), middle, dt = 9999999, mdt = 9999997, min_i, throtl = 0;
  8.  
  9.     while(true)
  10.     {
  11.         middle =  int(ceil((L+R)/2));
  12.  
  13.         if(middle == 0 || middle == c.size()-1)
  14.             return middle;
  15.  
  16.         if(val > c[middle])
  17.             L = middle;
  18.  
  19.         if(val < c[middle])
  20.             R = middle;
  21.  
  22.         if(val == c[middle])
  23.             return middle;
  24.  
  25.         /*
  26.             1 5 10 15
  27.  
  28.             3 7 12 17
  29.         */
  30.         dt = abs(val - c[middle]);
  31.  
  32.         if(dt < mdt){
  33.             mdt = dt;
  34.             min_i = middle;
  35.         }else if(dt == mdt){
  36.             return middle;
  37.         }else if(dt > mdt && throtl < 3){
  38.             throtl++;
  39.         }else if(dt > mdt && throtl >= 3){
  40.             return min_i;
  41.         }
  42.     }
  43.  
  44.     return middle;
  45. }
  46.  
  47. int main()
  48. {
  49.     int N,M;
  50.     scanf("%d",&N);
  51.  
  52.     vector<int> Shirts(N);
  53.  
  54.     for(int i = 0; i < N; i++)
  55.         scanf("%d", &Shirts[i]);
  56.  
  57.     scanf("%d",&M);
  58.  
  59.     vector<int> TShirts(M);
  60.  
  61.     for(int i = 0; i < M; i++)
  62.         scanf("%d", &TShirts[i]);
  63.  
  64.     //int startPhase = bf(Shirts,TShirts[0]);
  65.  
  66.     int Ms = -1, Mt = -1, Delta = 9999999;
  67.     for(int x = 0; x < N; x++)
  68.     {
  69.         int Nearest = bf(TShirts, Shirts[x]);
  70.  
  71.         int Dt = abs(TShirts[Nearest] - Shirts[x]);
  72.         if(Dt < Delta){
  73.             Delta = Dt;
  74.             Ms = x;
  75.             Mt = Nearest;
  76.  
  77.             if(Delta == 0){
  78.                 printf("%d %d", Shirts[Ms], TShirts[Mt]);
  79.                 return 0;
  80.             }
  81.         }
  82.     }
  83.  
  84.     printf("%d %d", Shirts[Ms], TShirts[Mt]);
  85. /*
  86.     3 4
  87.     1 2 3
  88. */
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement