最近对很头大呀,分享一个关于运行超时的代码

这是题目

7-16 运行超时

作者 朱允刚

单位 吉林大学

在数据结构上机实验中,当你的程序运行时间过长,超出题目限定的时间,将得到“TimeLimit”错误。对题目设定合理的运行时间限制非常重要。

对于每道题目,都有一个由作者亲自编写的标准程序,称为“主标准程序”此外,还有一些可以通过该题的其他标准程序,称为“标准程序”。
假定一共有n个程序,编号为1至n。其中第1个程序为“主标准程序”,其余程序为“标准程序”。假定第i个程序的运行时间为ai​秒。

朱老师准备按如下规则设定每道题目的运行时限x:

  • 时限不能过于严格,即x≥3a1​;
  • “标准程序”必须都能通过,即x≥ai​+1,(2≤i≤n);
  • x须为满足上述条件的最小偶数。

请编写程序帮助朱老师计算每道题目的运行时间限制x。

输入格式:

本题包含多组测试数据,第一行为一个整数T (1 ≤ T ≤ 10),表示测试数据组数。对于每组测试数据,第一行为一个整数n (2 ≤ n ≤ 10),表示程序数目,第二行为n个整数表示程序的运行时间 a1​,a2​,...,an​(1≤ai​≤10)。

输出格式:

对于每组测试数据,输出一个整数x。

输入样例:

2
2
1 3
2
1 4

输出样例:

4
6

 我们简单分析一下,这道题的难点在于数据太多,不方便计算。

为了解决这个问题,可以把除过第一行的数(第一行的数表示数据的组数)看成一个矩阵,然后定义一个二维数组。

这个二维数组很特殊,行下标为偶数的那一行只有第一个数字有意义,表示了程序数目

奇数行则表示程序运行时间a1,a2,......,an

这样,我们就容易建立循环了

#include<stdio.h>
int main()
{
    int n,c[20][20];
    scanf("%d",&n);
    int i=0,g=0,j=0;
    for(i=0;i<2*n;i=i+2)        /*因为一共有n组数据,每组数据占两行,故循环次数小于2n*/
    {
        scanf("%d",&c[i][0]);
        scanf("%d",&c[i+1][0]);
        g=3*c[i+1][0];         /*根据题意该组数据第一个数应乘三*/
        for(j=1;j<c[i][0];j++) /*c[i][0]表示该组数据的个数*/
        {
            scanf("%d",&c[i+1][j]);/*i+1行才是需要计算的数据*/
            if(g<c[i+1][j]+1)
            {
                g=c[i+1][j]+1;
            }
        }
        if(g%2==0)           /*这个If语句是为了保证所求值是最小偶数*/
        printf("%d\n",g);
        else
        printf("%d\n",g+1);   
    }
}

大家要是有什么想法,大胆发言,一起交流进步!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值