电影周末Codechef初学者部分:运行时错误

时间:2016-04-24 23:59:10

标签: c++ runtime-error

我已经为这个问题编写了以下代码,ideone并没有给我运行时错误但是codechef的编译器给了我一个。 codechef中的编译器是gcc 4.9.2

问题 [链接:https://www.codechef.com/problems/MOVIEWKN]

小小的叶戈尔是一个巨大的电影迷。他喜欢看各种类型的电影:从戏剧电影到喜剧电影,从青少年电影到恐怖电影。他计划本周末去看电影,但他不确定应该看哪部电影。 这个周末有n部电影值得观看。每部电影可以用两个整数Li和Ri来表征,表示相应电影的长度和等级。 Egor想要观看一部具有Li×Ri最大值的电影。如果有几部这样的电影,他会选择其中最大Ri的电影。如果还有平局,他会选择其中最小指数的那个。 你的任务是帮助叶戈尔在这个周末选择要观看的电影。

预期输入

输入的第一行包含一个整数T,表示测试用例的数量。

测试用例描述的第一行包含整数n(电影数量)。

测试用例描述的第二行包含n个整数L1,L2,...,Ln(L是电影的长度)。以下行包含n个整数R1,R2,...,Rn(R是电影的等级)。

我的输入
2
2
1 2
2 1
4
2 1 4 1
2 4 1 4

预期输出

对于每个测试用例,输出一个表示电影索引的整数i。请注意,遵循从1开始的索引。

我的输出
1
2

解释

在第一个示例情况下,两个胶片具有相同的L×R值,但第一个胶片具有更好的等级。 在第二个示例的情况下,第二和第四部电影同样好,但第二部电影的索引较小

我的解决方案

#include<iostream>
#include<string>
#include<vector>
using namespace std;

int main() {

    int T;

    cin >> T;
    cin.ignore();

    if (T >= 1 && T <= 5) {

        for (int q = 0; q < T; q++) {


            int n;
            size_t pos;
            cin >> n;
            cin.ignore();

            if (n >= 1 && n <= 100) {

                vector<int> L;
                vector<int> R;
                vector<int> C;

                for (int u = 0; u < n; u++) {

                    int a;
                    cin >> a;
                    cin.ignore();

                    if (a >= 1 && a <= 100) {

                        L.push_back(a);

                    }


                }
                for (int u = 0; u < n; u++) {

                    int a;
                    cin >> a;
                    cin.ignore();

                    if (a >= 1 && a <= 100) {

                        R.push_back(a);

                    }


                }
                for (int u = 0; u < n; u++) {

                    int df = (L[u] * R[u]);
                    C.push_back(df);



                }



                for (size_t u = 0; u < C.size(); u++) {

                    int max = C[0];


                    if (max < C[u]) {

                        max = C[u];
                        pos = u+1;
                    }

                    if (max == C[u]) {

                        if (R[pos-1] < R[u]) { pos = u + 1; }
                        if (R[pos - 1] == R[u]) {

                            if (pos > u) { pos = u + 1; }

                        }

                    }


                }

                cout << pos << endl;


            }

        }

    }

    return 0;
}

在完成关于codechef问题的运行时错误的一些问题后,我猜测问题与访问边界元素有关,但我无法确定实际问题

2 个答案:

答案 0 :(得分:2)

在这一行:

if (R[pos - 1] < R[u]) { pos = u + 1; }

第一次循环,pos未初始化,导致未定义的行为。

简单修复:

在循环

之前添加pos = 1

答案 1 :(得分:0)

我可能迟到了,但这是我的简单解决方案:

t=int(input())
for j in range(0,t):
    n=int(input())
    a=[int(ele) for ele in input().split()]
    b=[int(ele) for ele in input().split()]
    c=[]
    pos=0
    max=-1
    max2=-1
    for i in range(0,n):
        fl=0
        c.append(a[i]*b[i])
        if(max<c[i]):
            max=c[i]
            fl=1
        if(fl==1):
            pos=i+1
            max2=b[i]
        elif(max==c[i]):
            if(max2<b[i]):
                pos=i+1
                max2=b[i]
    print(pos)