#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
int T;
cin>>T;
do{
vector<int> ans;
int N=0;
cin>>N;
vector<int> attackArray(N), defArray(N);
for (int i =0; i<N; i++) {
cin>>attackArray[i];
}
for (int i =0; i<N; i++) {
cin>>defArray[i];
}
for (int i =0; i<N; i++) {
int nexti, previ;
if (i == 0)
{
nexti = 1;
previ = N - 1;
}
else if (i == N - 1)
{
nexti = 0;
previ = N - 2;
}
else
{
nexti = i + 1;
previ = i - 1;
}
if (defArray[i] > attackArray[nexti] &&
defArray[i] > attackArray[previ] &&
defArray[i] > attackArray[nexti] + attackArray[previ]){
ans.push_back(defArray[i]);
}
else {ans.push_back(-1); break;}
}
sort(ans.begin(), ans.end(), greater<int>());
cout<<ans[0]<<endl;
T--;
}while (T !=0);
return 0;
}
输入
输入的第一行包含一个单个整数T,表示测试用例的数量。 T测试用例的描述如下。 每个测试用例的第一行包含一个整数N。 第二行包含N个以空格分隔的整数a1,a2,…,aN。 第三行包含N个以空格分隔的整数d1,d2,…,dN。
输出
对于每个测试用例,打印一行包含一个整数-国王获得的盾牌的最佳防御值;如果可以将Chef扔进蛇坑,则为-1。
示例
2
4
1 1 4 1
3 4 2 1
7
5 4 5 4 5 4 5
3 2 4 7 2 5 9
示例输出
3
-1
答案 0 :(得分:0)
问题是您的if
语句序列应该是一个if ... else if ... else
语句。
if (i == 0)
...
else if (i==N-1)
...
else
...
除非先前的if
条件评估为true,否则除非您使用if
,否则在执行else
语句后,代码不会停止执行。因此,即使if
或i == 0
时,第三个i == N - 1
语句中的条件仍在执行,导致数组访问超出范围并崩溃。
也
int attackArray[N],defArray[N];
不是合法的C ++,因为所有数组大小都必须是编译时间常数。显然,您使用的是无关紧要的编译器,但应该这样做,所以请改用它
vector<int> attackArray(N), defArray(N);
最后,在您的不同条件下有很多重复的代码。您可以通过为i
的下一个和上一个值添加几个额外的变量来简化很多工作。例如
int nexti, previ;
if (i == 0)
{
nexti = 1;
previ = N - 1;
}
else if (i == N - 1)
{
nexti = 0;
previ = N - 2;
}
else
{
nexti = i + 1;
previ = i - 1;
}
if (defArray[i] > attackArray[nexti] &&
defArray[i] > attackArray[previ] &&
defArray[i] > attackArray[nexti] + attackArray[previ])
...