Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "bits/stdc++.h"
- using namespace std;
- const double pi = acos(-1);
- int main()
- {
- freopen("cylinders.in" ,"r" ,stdin);
- int t;
- scanf("%d",&t);
- while(t--){
- int n;
- scanf("%d",&n);
- vector <pair<double ,int>> vs;
- for(int a,b,i=0; i<n; i++){
- scanf("%d%d",&a,&b);
- vs.push_back({a*pi*b*b ,0});
- }
- int m;
- scanf("%d",&m);
- vector <pair<long long ,int>> s(m);
- for(int i=0; i<m; i++)
- scanf("%I64d",&s[i].first) ,s[i].second = i;
- sort(vs.begin() ,vs.end());
- sort(s.begin() ,s.end());
- for(int i=n-1; i; i--){
- vs[i].first -= vs[i-1].first;
- vs[i].second = n-i;
- }vs[0].second = n;
- //for(int i=0; i<n; i++)
- // cout << vs[i].first << ' ' << vs[i].second << endl;
- //cout << "-------------" << endl;
- int vs_ptr = 0;
- vector <double> ans(m ,-1e9);
- double bef = 0 ,time = 0;
- for(auto&q : s){
- long long w = q.first;
- while(vs_ptr < n && bef + vs[vs_ptr].first*vs[vs_ptr].second <= w){
- bef += vs[vs_ptr].first*vs[vs_ptr].second;
- time += vs[vs_ptr].first;
- vs_ptr++;
- }
- //cout << " --- " << vs_ptr << ' ' << bef << ' ' << time << endl;
- if(bef < w && vs_ptr == n)
- break;
- ans[q.second] = (time + (w - bef)/vs[vs_ptr].second);
- }
- for(auto&a : ans){
- if(a < 0)
- printf("IMPOSSIBLE\n");
- else
- printf("%.2lf\n",a);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement