C. 暑假打工

题意:现在有N份一次性工作可供选择。如果你接受并完成第i份工作,你将在完成后的第Ai天获得Bi元的报酬。 每天你最多可以接受并完成其中一份工作。 但是,你不能重复接受已经做过的工作。 求在从今天起不超过M天的时间内,你能获得的最大总报酬。 你可以从今天就开始工作。

思路:排出最优方案(贪心),运用优先队列,求出期限内可得最高工资

#include <bits/stdc++.h>
using namespace std;

const int N=1e5+5; 
struct aaa{
	int a,b;
}jobs[N];

int n,m,ans;
priority_queue<int> q;

int cmp(aaa x,aaa y){
	return x.a<y.a;
}

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i=0;i<n;i++){
		cin>>jobs[i].a>>jobs[i].b;
	}
	sort(jobs,jobs+n,cmp);
//	for(int i=1;i<=n;i++){
//		cout<<jobs[i].a<<' '<<jobs[i].b<<endl;
//	}
	int idx=0;
	for(int i=1;i<=m;i++){
		while(idx<n&&jobs[idx].a<=i){
			q.push(jobs[idx].b);
//			cout<<jobs[idx].b<<' ';
			idx++;
		}
		if(q.size()){
//			cout<<ans<<endl;
//			cout<<q.top()<<' ';
			ans+=q.top();
			q.pop();
			
		}
	}
	cout<<ans;
	return 0;
}

D. 我喜欢因式分解

题意:给定一个整数x,找出一对整数(A,B),使a^5^-b^5^=x

思路:根据题目所给数据范围,推出A,B的取值范围,枚举判断

#include <bits/stdc++.h>
using namespace std;

int x;

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>x;
	for(int i=-200;i<=200;i++){
		for(int j=-200;j<=200;j++){
			if(pow(i,5)-pow(j,5)==x){
				cout<<i<<' '<<j;
				return 0;
			}
		}
	}
	return 0;
}