我不理解
查看原帖
我不理解
759274
Stevehim楼主2022/11/28 18:10

这是题解的代码

#include <cstdio>
    #include <algorithm>
    #define ri register int
    #define getchar() (S==T&&(T=(S=BB)+fread(BB,1,1<<15,stdin),S==T)?EOF:*S++)
    char BB[1<<20],*S=BB,*T=BB;
    using namespace std;
    int n,sum;
    inline int read() 
    {
        int num=0,w=1; char ch=0;
        while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar(); }
        while(ch>='0'&&ch<='9') num=(num<<3)+(num<<1)+ch-'0',ch=getchar();
        return num*w;
    }
    struct A{
        int num,day;
    }a[100000];
    bool cmp(A a,A b)
    {  
        return a.num<b.num;  
    } 
    inline int check(int x)
    {    int p=2147483647,t=2147483647;
        if(a[x].day==1)    return a[x].num;
        for(ri i=x-1;i>=1;--i)
                        if(a[i].day<a[x].day)    {p=(a[i].num>a[x].num)?a[i].num-a[x].num:a[x].num-a[i].num;break;}
        for(ri i=x+1;i<=n;++i)
                        if(a[i].day<a[x].day)    {t=(a[i].num>a[x].num)?a[i].num-a[x].num:a[x].num-a[i].num;break;}
        return (p>t)?t:p;
    }
    int main()
    {
        n=read();
        for(ri i=1;i<=n;++i)
            a[i].num=read(),a[i].day=i;
        sort(a+1,a+1+n,cmp);
        for(ri i=1;i<=n;++i)
            sum+=check(i);
        printf("%d",sum);
        return 0;
}

这是我的代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <string>
#define maxn 1000100
using namespace std;

struct day {
    int num;
    int val;
} a[maxn];
int n;

bool cmp(day a, day b) {
    return a.val < b.val;
}

int check(int x) {
    int t1 = 1e9 + 10;
//  int t2 = 0;
    if (a[x].num == 0) {
        return a[x].val;
    }
    for (int i = 0; i < n; i++) {
        if (a[i].num < a[x].num) {
            t1 = min(abs(a[i].val - a[x].val), t1);
//          cout << "t1=" << t1 << endl;
        }
    }
    return t1;
}

int main() {
    cin >> n;
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i].val);
        a[i].num = i;
    }
    int sum = 0;
    sort(a, a + n, cmp);
//  cout << "sum=" << sum << endl;
    for (int i = 0; i < n; i++) {
//      cout << ":" << check(i) << endl;
        sum += check(i);
    }
    cout << sum;
    return 0;
}

为什么我的就会疯狂爆TLE?

2022/11/28 18:10
加载中...