Advertisement
mohammedehab2002

Untitled

Nov 16th, 2020
931
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. #include "bits/stdc++.h"
  2. using namespace std;
  3.  
  4. const double pi = acos(-1);
  5.  
  6. int main()
  7. {
  8.     freopen("cylinders.in" ,"r" ,stdin);
  9.  
  10.     int t;
  11.     scanf("%d",&t);
  12.     while(t--){
  13.         int n;
  14.         scanf("%d",&n);
  15.         vector <pair<double ,int>> vs;
  16.         for(int a,b,i=0; i<n; i++){
  17.             scanf("%d%d",&a,&b);
  18.             vs.push_back({a*pi*b*b ,0});
  19.         }
  20.         int m;
  21.         scanf("%d",&m);
  22.         vector <pair<long long ,int>> s(m);
  23.         for(int i=0; i<m; i++)
  24.             scanf("%I64d",&s[i].first) ,s[i].second = i;
  25.         sort(vs.begin() ,vs.end());
  26.         sort(s.begin() ,s.end());
  27.  
  28.         for(int i=n-1; i; i--){
  29.             vs[i].first -= vs[i-1].first;
  30.             vs[i].second = n-i;
  31.         }vs[0].second = n;
  32.         //for(int i=0; i<n; i++)
  33.           //  cout << vs[i].first << ' ' << vs[i].second << endl;
  34.         //cout << "-------------" << endl;
  35.  
  36.         int vs_ptr = 0;
  37.         vector <double> ans(m ,-1e9);
  38.         double bef = 0 ,time = 0;
  39.         for(auto&q : s){
  40.             long long w = q.first;
  41.             while(vs_ptr < n && bef + vs[vs_ptr].first*vs[vs_ptr].second <= w){
  42.                 bef += vs[vs_ptr].first*vs[vs_ptr].second;
  43.                 time += vs[vs_ptr].first;
  44.                 vs_ptr++;
  45.             }
  46.             //cout << " --- " << vs_ptr << ' ' << bef << ' ' << time << endl;
  47.             if(bef < w && vs_ptr == n)
  48.                 break;
  49.             ans[q.second] = (time + (w - bef)/vs[vs_ptr].second);
  50.         }
  51.  
  52.         for(auto&a : ans){
  53.             if(a < 0)
  54.                 printf("IMPOSSIBLE\n");
  55.             else
  56.                 printf("%.2lf\n",a);
  57.         }
  58.     }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement