求助,为什么代码几乎一样答案却完全不同
查看原帖
求助,为什么代码几乎一样答案却完全不同
967480
jiunichenyin楼主2024/5/3 13:50
#include<iostream>
#include<iomanip>
#include<math.h>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<map>
#define maxn 40010
using namespace std;
struct zhi {
    int id;
    int shu;
}chushi[maxn];
bool com(zhi a, zhi b) {
    if (a.shu != b.shu) {
        return a.shu < b.shu;
    }
    return a.id < b.id;
}
int n, m,caozuo,t[maxn];
int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        cin >> chushi[i].shu;
        chushi[i].id = i; 
    }
    sort(chushi + 1, chushi + 1 + n, com);
    for (int i = 1; i <= n; ++i) {
        t[chushi[i].id] = i;
    }
    for (int j = 1;j <= m; ++j) {
        cin >> caozuo;
        if (caozuo == 1) {
            int x, y;
            cin >> x >> y;
            chushi[t[x]].shu = y;
            for (int i = 2; i <=n; ++i) {
                if (com(chushi[i],chushi[i-1])) {
                    swap(chushi[i], chushi[i-1]);
                }
            }
            for (int i = n; i >1; --i) {
                if (com(chushi[i],chushi[i-1])) {
                    swap(chushi[i],chushi[i - 1]);
                }
            }
            for (int i = 1; i<= n; ++i) {
                t[chushi[i].id] = i;
            }
        }
        else {
            int x;
            cin >> x;
            cout << t[x] << endl;
        }
    }
    return 0;
}
inline int read() {
    int w = 1, q = 0;
    char ch = ' ';
    while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
    if (ch == '-') w = -1, ch = getchar();
    while (ch >= '0' && ch <= '9') q = q * 10 + ch - '0', ch = getchar();
    return w * q;
}

和

#include<iostream>
#include<iomanip>
#include<math.h>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<map>
#define maxn 4001000
using namespace std;
struct zhi {
    int id;
    int shu;
}chushi[maxn];
bool com(zhi a, zhi b) {
    if (a.shu != b.shu) {
        return a.shu < b.shu;
    }
    return a.id < b.id;
}
int n, m,caozuo,t[maxn];
int read();
int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        cin >> chushi[i].shu;
        chushi[i].id = i; 
    }
    sort(chushi + 1, chushi + 1 + n, com);
    for (int i = 1; i <= n; ++i) {
        t[chushi[i].id] = i;
    }
    for (int j = 1;j <= m; ++j) {
        cin >> caozuo;
        if (caozuo == 1) {
            int x, y;
            cin >> x >> y;
            chushi[t[x]].shu = y;
            for (int i = 1; i < n; ++i) {
                if (com(chushi[i],chushi[i+1])) {
                    swap(chushi[i], chushi[i+1]);
                }
            }不同的地方
            for (int i = n; i >1; --i) {
                if (com(chushi[i],chushi[i-1])) {
                    swap(chushi[i],chushi[i - 1]);
                }
            }
            for (int i = 1; i<= n; ++i) {
                t[chushi[i].id] = i;
            }
        }
        else {
            int x;
            cin >> x;
            cout << t[x] << endl;
        }
    }
    return 0;
}
inline int read() {
    int w = 1, q = 0;
    char ch = ' ';
    while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
    if (ch == '-') w = -1, ch = getchar();
    while (ch >= '0' && ch <= '9') q = q * 10 + ch - '0', ch = getchar();
    return w * q;
}

第二段代码只能过两个点

2024/5/3 13:50
加载中...