- 闫晟淏 的博客
2025年2月5日 思维训练 day2
- @ 2025-2-5 17:27:51
错题:
章节二T5
错因:
变量名写错。
思路:
创建数组遍历每个点经过的人数,如果和总人数一样,就记录这个点和摄影师的距离,随后找出最短距离输出,不然输出-1。
参考代码:
#include<bits/stdc++.h>
using namespace std;
int s[1001];
int op[1001];
int main(){
bool t=true;
int n,x,a,b,cnt=0;
cin>>n>>x;
for(int i=0;i<n;i++){
cin>>a>>b;
for(int j=min(a,b);j<=max(a,b);j++){
s[j]++;
}
}
for(int i=0;i<1001;i++){
if(s[i]==n){
t=false;
op[cnt++]=abs(x-i);//错时此处x-i的x写成了n。
}
}
if(t){
cout<<-1<<endl;
}else{
sort(op,op+cnt);
cout<<op[0];
}
return 0;
}
章节二T6
错因:
未分析题目使“每个元素都得到匹配”这一句话没重视。导致代码里没写每个元素都得到匹配这一条件,导致题目出错。
思路:
按数据值范围写数组,进行存储,按每个可能的结果的特殊数字数来减每个结果统一有的数字数(如结果124的特殊数字是4,因为其他结果没有,特殊数字不删),减到倒数第二个结果(删减是一旦有低于零的就直接输出-1),如果最后一个结果统计下来没问题就输出结果。
参考代码:
#include<bits/stdc++.h>
using namespace std;
int b[8];
int main(){
int n,a;
cin>>n;
for(int i=0;i<n;i++){
cin>>a;
b[a]++;
}
b[1]-=b[4];
b[2]-=b[4];
if(b[1]<0||b[2]<0){
cout<<-1;
return 0;
}
b[1]-=b[3];
b[6]-=b[3];
if(b[1]<0||b[6]<0){
cout<<-1;
return 0;
}
if(b[1]==b[6]&&b[6]==b[2]){
for(int i=0;i<b[4];i++){
cout<<1<<" "<<2<<" "<<4<<endl;
}
for(int i=0;i<b[3];i++){
cout<<1<<" "<<3<<" "<<6<<endl;
}
for(int i=0;i<b[6];i++){
cout<<1<<" "<<2<<" "<<6<<endl;
}
}else{
cout<<-1;
return 0;
}
return 0;
}
THE END