- 杜昊阳 的博客
七月day1
- @ 2025-7-15 19:33:04
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++){