T2chess960

解决方案:

运用循环重复判断是否满足条件,并输出判断结果。

正确代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int b1=0,b2=0,r1=0,r2=0,k=0;
    for(int i=0;i<8;i++){
        char x;
        cin>>x;
        if(x=='B') {
            if(b1) b2=i;
            else b1=i;
        }else if(x=='R'){
            if(r1) r2=i;
            else r1=i;
        }else if(x=='K'){
            k=i;
        }
    }
    if(b1%2!=b2%2&&min(r2,r1)<k&&k<max(r2,r1)){
        cout<<"Yes"<<endl;
    }else{
        cout<<"No"<<endl;
    }
    return 0;
}

错误原因:

在第17行中min(r2,r1)min(r2,r1)是原来的代码漏掉的一个判断。

T3暑假打工

题目描述:

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

使用主要思想:

1.优先队列priority_queue 2.二维动态数组vector

解决方案:

正确代码:

#include<bits/stdc++.h>
using namespace std;
priority_queue<int> q1;
priority_queue<int,vector<int>,greater<int>> q2;
vector<pair<int,int>> jobs;
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        int ai,bi;
        cin>>ai>>bi;
        jobs.push_back({ai,bi});
    }
    sort(jobs.begin(),jobs.end());
    int idx=0,ans=0;
	for(int day=1;day<=m;day++){
		while(idx<n&&jobs[idx].first<=day){
		q1.push(jobs[idx].second);
		idx++;
		}
		if(q1.size()!=0){
			ans+=q1.top();
			q1.pop();
		}
	}
	cout<<ans<<endl;
	return 0;
}

T4我爱因式分解

解决方案:

分析A和B的值在什么范围,嵌套循环,用枚举法输出这两个数。

原代码:

#include<bits/stdc++.h>
using namespace std;
int a,b,x;
int main(){
	cin>>x;
	for(a=-100;a<=100;a++){
		for(b=-100;b<=100;b++){
			if(pow(a,5)-pow(b,5)==x){
				cout<<a<<" "<<b;
				return 0;
			}
		}
	}
}

错误原因:

推测是遍历数字的时候上限和下限开小了,所以有部分答案无法获取,于是便把上下限调高至1000,如下

	for(a=-1000;a<=1000;a++){
		for(b=-1000;b<=1000;b++){