#include<bits/stdc++.h> using namespace std; bool compare(pair<int,int> p1,pair<int,int> p2) { return p1.first<p2.first;//sorting the distance wrt Truck } int main() { int t; cin>>t; while(t--) { int n; cin>>n; vector<pair<int,int>> v; for(int i=0;i<n;i++) { int d,f; cin>>d>>f; v.push_back(make_pair(d,f)); } int T,F;//t->Town distance, F-current Fuel; cin>>T>>F; for(int i=0;i<n;i++) { v[i].first=T-v[i].first;//updating the distance ofo station wrt truck } sort(v.begin(),v.end(),compare); int x=0;//current station(as vector starts from 0) int prev=0;//distance of prev station int ans=0; int flag=0; priority_queue<int> pq; while(x<n)//iterating over all the stations { if(F>=v[x].first-prev)//we have more fuel than required to reach the next station { F-=(v[x].first-prev); pq.push(v[x].second); prev=v[x].first; } else//we don't have enough fuel to reach the entire station { if(pq.empty())//our priority queue is empty that mean we donbt have any fuel in station so we can't reach to our destination so we break { flag=1; break; } //our maxheap is not empty so we fill our truck with maximum available fuel F=F+pq.top(); pq.pop(); ans++; continue;//we are using this because it might be possible ki station kaafi door hai agla aur sirf ek baar heap ke top ko add karne se humara current fuel enouh nahi hahi waha tak pohochne ke liye toh hum is continue ki hlp se dubara add karleng heap ke top ko } x++;//now going on to next station } if(flag==1) { cout<<-1<<endl; continue; } T = T-v[n-1].first; if(F>=T)//checking that we can reach to our town or not { cout<<ans<<" "; continue;//ab next test case ke lie continue use karre hai } //agar hum is line pe aye hai toh matlab humare paas enough fuel nahi hai while(F<T)//we go through this loop till we have enough fuel { if(!pq.empty()) { F+=pq.top(); pq.pop(); ans++; continue;;//we are using this because it might be possible ki station kaafi door hai agla aur sirf ek baar heap ke top ko add karne se humara current fuel enouh nahi hahi waha tak pohochne ke liye toh hum is continue ki hlp se dubara add karleng heap ke top ko } else { flag=1; break; } } if(flag==1) { cout<<-1<<endl; } cout<<ans<<endl; } return 0; }
Write, Run & Share C++ code online using OneCompiler's C++ online compiler for free. It's one of the robust, feature-rich online compilers for C++ language, running on the latest version 17. Getting started with the OneCompiler's C++ compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as C++
and start coding!
OneCompiler's C++ online compiler supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample program which takes name as input and print your name with hello.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
cout << "Enter name:";
getline (cin, name);
cout << "Hello " << name;
return 0;
}
C++ is a widely used middle-level programming language.
When ever you want to perform a set of operations based on a condition If-Else is used.
if(conditional-expression) {
//code
}
else {
//code
}
You can also use if-else for nested Ifs and If-Else-If ladder when multiple conditions are to be performed on a single variable.
Switch is an alternative to If-Else-If ladder.
switch(conditional-expression){
case value1:
// code
break; // optional
case value2:
// code
break; // optional
......
default:
code to be executed when all the above cases are not matched;
}
For loop is used to iterate a set of statements based on a condition.
for(Initialization; Condition; Increment/decrement){
//code
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while (condition) {
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity. Function gets run only when it is called.
return_type function_name(parameters);
function_name (parameters)
return_type function_name(parameters) {
// code
}