蒟蒻问一下两份代码的区别,一个六十,一个AC

P1678 烦恼的高考志愿

wangshi @ 2022-03-17 09:07:15

AC

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<array>
using namespace std;
int a[100010];
long long ans;
int main()
{
    int m,n;
    cin>>m>>n;
    for(int i=1;i<=m;i++) cin>>a[i];
    sort(a+1,a+m+1);
    for(int i=1;i<=n;i++)
    {
        int s,s1;
        cin>>s;
        s1=lower_bound(a+1,a+m+1,s)-a;
        if(s1==m+1) ans+=s-a[m];
        else
            if(s1==1)
                ans+=a[1]-s;
            else
                ans+=min(abs(a[s1]-s),abs(s-a[s1-1]));
    }
    cout<<ans;
    return 0;
}

60

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<array>
using namespace std;
array<int,100010> a;
long long ans;
int main()
{
    int m,n;
    cin>>m>>n;
    for(int i=1;i<=m;i++) cin>>a[i];
    sort(a.begin(),a.end());
    for(int i=1;i<=n;i++)
    {
        int s,s1;
        cin>>s;
        s1=lower_bound(a.begin(),a.end(),s)-a.begin();
        if(s1==m+1) ans+=s-a[m];
        else
            if(s1==1)
                ans+=a[1]-s;
            else
                ans+=min(abs(a[s1]-s),abs(s-a[s1-1]));
    }
    cout<<ans;
    return 0;
}

这个array和数组有什么区别


by naroanah @ 2022-03-17 09:10:27

array<T,N> 模板定义了一种相当于标准数组的容器类型。它是一个有 N 个 T 类型元素的固定序列。除了需要指定元素的类型和个数之外,它和常规数组没有太大的差别。显然,不能增加或删除元素。


by Loser_King @ 2022-03-17 09:11:16

你把 array 排序的时候使用了 sort(a.begin(),a.end()),然后把后边的 0 也给排进去了。

试试把 a.begin(),a.end() 都换成 a.begin()+1,a.begin()+m


by wangshi @ 2022-03-17 09:17:56

@Loser_King 照您这么改就40了。。。


by Rubidium_Chloride @ 2022-03-17 09:38:05

为什么有人要用 array...?


by Loser_King @ 2022-03-17 09:41:35

@wangshi 突然发现我憨了

试试把 a.begin(),a.end() 都换成 a.begin()+1,a.begin()+m+1


by jijidawang @ 2022-03-17 09:42:43

@wangshi 改成

a.begin()+1,a.begin()+m+1

就过了 .


by wangshi @ 2022-03-17 09:54:32

@jijidawang @Loser_King 谢谢大佬


|