注册 登录
编程论坛 C++教室

TLE TLE 大佬们有什么办法提高效率吗(c而非c++

bug芒果核 发布于 2025-09-23 21:19, 712 次点击
#include<stdio.h>
int main(){
    int h,p,q,n,a;
    while(scanf("%d%d%d%d",&h,&p,&q,&n)!=EOF){
    int b=h,a[300005]={},x=0;
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
        b+=a[i];
        if(b>=q){
        printf("up\n");
        x=1;
        break;}
        else if(b<=p){
        printf("down\n");
        x=1;
        break;}
    }
    if(!x){
    if(!(b-h)) printf("No\n");
    else if((b-h)>0) printf("up\n");
    else printf("down\n");  
    }
}
return 0;
}


水库预测-version1
时间限制:1000ms   内存限制:65536kb

题目描述
在一次旅行中,小p来到一个水库。这个水库当前水位为 h,并且有两个警戒线,分别为最低水位警戒线 p与最高水位警戒线 q。当水库的水线低于(含达到)水位警戒线 p时,将触发低水位预警;超过(含达到)最高水位警戒线 q时,将触发高水位预警。在小 P于此处停留的一天中共观察水库 n次,并将每次水库水线相于上次观察的变化值 ai记录下来。小 P想知道,假设水库每天的水线都会如此变化,那么从小 P观察的那一天开始(含这一天),哪种预警将在这个水库中最早出现?
注:水位线可以为负值,小 P观察的那一天记为第 0 天。
输入
本题为不定组输入,对于每一组输入:第一行输入三个整数,分别为 h,p,q,保证 0<p<h<q≤2×109。
第二行输入一个整数,为 n,保证0<n≤3×105。
第三行输入 n个整数,分别为 a1,a2,...,an,保证 −2×109≤ai≤2×109。
保证所有组输入中 n 之和不超过 3×105。
输出
对于每一组输入,共输出一行字符串。如果预警为超过最高(含达到)水位警戒线,则输出up;如果预警为低于(含达到)最低水位警戒线,则输出down;如果始终没有出现预警,则输出 No。
输入样例
5 2 10
2
3 -1
5 2 10
2
3 -3
5 2 10
2
-3 4
输出样例
up
No
down

3 回复
#2
rjsp2025-09-24 13:05
int a[300005]; 有什么用?即,为什么要保存它们?
另外,break 也不对吧,后面的数据即使没用了也要读完,否则下一组就乱套了。
#3
bug芒果核2025-09-24 19:59
回复 楼主 bug芒果核

辛苦
#4
rjsp2025-09-25 08:33
差不多(未必正确)是:
程序代码:
#include <stdio.h>

int main( void )
{
    for( int h,p,q,n; scanf("%d%d%d%d",&h,&p,&q,&n)==4; )
    {
        int c = h;
        for( int i=0; i!=n && c>p && c<q; ++i )
        {
            int a;
            scanf( "%d", &a );
            c += a;
        }
        scanf( "%*[^\n]" );

        if( c > h )
            puts( "up" );
        else if( c < h )
            puts( "down" );
        else
            puts( "No" );
    }
}

1