问题标题: 酷町堂:各位大佬帮个忙,帮我看一看为啥90分,超时

0
0
已解决
项依凡
项依凡
初级光能
初级光能

题目描述

给定n个正整数,请在每一个数的右边查找跟这个数最接近的比它大的数,如果没有就输出0。

 

程序输入说明

两行,第一行为n;第二行n个正整数。

程序输出说明

一行,n个数,每两个数之间用空格隔开。

程序输入样例

6
6 15 5 6 7 10

程序输出样例

15 0 6 7 10 0

 

 

#include<iostream>
#include<cstdio>
using namespace std;

int a[1000000];
int main(){
    int n;
    bool flag=false;
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    for (int i=1;i<=n;i++)
    {
        flag=false;
        for (int j=i;j<=n;j++)
        {
            if (a[i]<a[j])
            {
                printf("%d ",a[j]);
                flag=true;
                break;
            }
        }
        if (flag==false) cout<<0<<" ";
    }
    return 0;
}

项依凡在2018-08-16 08:02:14追加了内容

这道题是ai课堂的,没有题号


0
0
0
0
0
0
0
叶子煊
叶子煊
中级光能
中级光能

这是主要部分:

    输入>>n;
    循环(int i=1;i<=n;i++)
    {
        cin>>a[i];
        b[n-i+1]=a[i];
    }
    循环(int i=1;i<=n;i++)
    {
        循环(int j=n-i;j>=1;j--)
        {
            如果(a[i]<b[j])
            {
                输出<<b[j]<<" ";
                break;
            }
            否则 如果(a[i]>b[j])
            {
                s++;
                如果(s==n-i)
                {
                    输出<<0<<" ";
                }
            }
        }
    }
    输出<<0;

自己多理解理解

别忘了文件头和定义,哈

望采纳!!!!

希望对你有一定的帮助!!!!

0
徐铭凯
徐铭凯
资深守护
资深守护

主要原因应该是样例太强了

发一下题号行不行

这里有一个优化,应该能让你不再爆0(你不发题号,我也试不了能否AC):

 

首先,用一个变量存之前输出是0的最大数

其次,每次i++开始新一轮后,判断2点(i==1不要进行优化,直接算):

最后,上优化代码

if(a[i]>=t)    //t为那个变量
{
    cout<<"0 ";
    t=a[i];
    continue;

即为

#include<iostream>
#include<cstdio>
using namespace std;

int a[1000000],t;
int main(){
    int n;
    bool flag=false;
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    for (int i=1;i<=n;i++)
    {
        flag=false;

        if(i>1&&a[i]>=t)    //t为那个变量
    {
        cout<<"0 ";
        t=a[i];

        continue;
    } 
        for (int j=i;j<=n;j++)
        {
            if (a[i]<a[j])
            {
                printf("%d ",a[j]);
                flag=true;
                break;
            }
        }
        if (flag==false) cout<<0<<" ";
    }
    return 0;
}

徐铭凯在2018-08-10 16:37:28追加了内容

我只算发了个优化,最后一段剩余代码全为发帖者所写,只加了个优化部分,勿举报!!!

0
陆麟瑞
陆麟瑞
资深天翼
资深天翼

单调栈飞快。

    for(int i=1; i<=n; i++)
    {
        int a;
        cin>>a;
        while(!s.empty()&&s.top().high<a)
        {
            ans[s.top().num]=i;
            s.pop();
            if(s.empty()) break;
        }
        s.push((cow){a,i});
    }

0
0
我要回答