- 向彧 的博客
7月—Dey1
- @ 2025-7-15 19:12:07
C. C暑假打工
题意:
有N份一次性工作可供选择,接受并完成第i份工作,你将在完成后的第Ai天获得Bi元,问从今天起到第M天最多多少钱。 元的报酬
思路:
使用结构体将Ai于Bi绑一起;如果Ai<=M将Bi压入一个优先队列(大根堆)中,随后将优先队列列顶元素取出加入计数变量中。
代码:
#include <bits/stdc++.h>
using namespace std;
const int N=1e6;
int n,m,idx,ans;
priority_queue<int> q;
vector<pair <int,int> > jobs;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int x,y;
cin>>x>>y;
jobs.push_back({x,y});
}
sort(jobs.begin(),jobs.end());
for(int i=1;i<=m;i++){
while(idx<n && jobs[idx].first<=i){
q.push(jobs[idx].second);
idx++;
}
if(q.size()!=0){
ans+=q.top();
q.pop();
}
}
cout<<ans;
return 0;
}
我喜欢因式分解
题意:
给定一个整数X,找出一对整数A,B,使A的5次方-B的5次方=X。
思路:
因题目给定1<=X<=1e9,假设A的5次方为1e10,那么-100<=A<=100;-100<=B<=100(但是实际要放大一些);然后枚举判断。
代码:
#include<bits/stdc++.h>
using namespace std;
long long x;
int cc(long long x){
return x*x*x*x*x;
}
int main(){
cin>>x;
for(int i=-120;i<=120;i++){
for(int j=-120;j<=120;j++){
if(cc(i)-cc(j)==x){
cout<<i<<" "<<j;
return 0;
}
}
}
return 0;
}
}