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;
}
}