错题:

章节二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