问题标题: 酷町堂:5168与5167有什么不同?

0
0
已解决
李瑞曦
李瑞曦
高级天翼
高级天翼

没有什么不同啊,只是数据大了点,把数组开大后为什么超时?

#include <iostream>
#include <algorithm>
using namespace std;
int n,t,d;
int a[1121111];
int t,cnt,s=0x3f3f3f3f;
int main() {
    cin>>n>>d;
    for(int i=1;i<=n;i++)
    cin>>a[i];
    for(int i=1;i<=n;i++)
    {
        t=a[i]+d;
        for(int j=1;j<=n;j++)
        {
            if(a[j]<a[i]||a[j]>a[i]+d)
                cnt++;
        }
        s=min(s,cnt);
        cnt=0;
    }
    cout<<s;
    return 0;
}

都来看看啊~

李瑞曦在2020-07-14 15:11:51追加了内容

我太难了~


0
已采纳
汤启恩
汤启恩
新手光能
新手光能

1.数据范围不一样

第一题

n∈[1,100],d∈[0,100],每个数∈[1,100]

第二题

n∈[1,200000],d∈[0,1000],每个数∈[1,100000]

第一题用双重循环没有问题,但第二题很有可能会超时

所以第二题必须用单重循环+while

第二题思路(第一题也能用):

定义n,k,a[只要定义200001],minn=200001;

输入

sort排序

定义j=1;

循环1~n

while(j<=n&&a[j]-a[i]<=k)

j++;

minn=minn和n-(j-i)的最小值

最后输出minn

0
0
董子墨
董子墨
中级天翼
中级天翼

你都不计算时间复杂度的呀

时间复杂度都是O(n^2)

第1题O(n^2)=O(100*100)=O(10^5),没到10^8,不会超。

第2题O(n^2)=O(100000*100000)=O(10^10),到了10^8,会超。

0
0
0
张恩泽
张恩泽
高级天翼
高级天翼

循环次数超过10^8就会超时

我要回答