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

Movie Weekend Codechef Beginner Section : Runtime Error

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

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

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

预期输入

输入的第一行包含一个整数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 问题的运行时错误问题后,我猜测问题与访问边界元素有关,但我无法查明实际问题

这一行:

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

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

简单修复:

在循环前添加pos = 1

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

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)