c++ - 使用 C++ 的 UVA Judge Online 的运行时错误(问题 10050)
问题描述
嗨,我的程序有问题,老实说,我不知道在哪里或如何解决它。这是代码
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <iomanip>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
bool ok;
int testcases;
scanf("%d", &testcases);
vector<int> days(testcases);
vector<int> parties(testcases);
vector<vector<int>> hartals(2);
for (int i = 0; i < testcases; i++)
{
scanf("%d", &(days[i]));
scanf("%d", &parties[i]);
hartals[i].resize(parties[i]);
for (int j = 0; j < parties[i]; j++)
{
scanf("%d", &hartals[i][j]);
}
}
vector<vector<int>> initialHartalsValues = hartals;
for (int i = 0; i < testcases; i++)
{
int week = 0, nonWorkingDays = 0;
for (int j = 1; j < days[i] + 1; j++)
{
if (j != 1 && j - 7 * (week + 1) == 1)
{
week++;
}
ok = true;
for (int k = 0; k < hartals[i].size(); k++)
{
if (hartals[i][k] == j)
{
hartals[i][k] = hartals[i][k] + initialHartalsValues[i][k];
if (ok && j - 7 * week != 6 && j - 7 * week != 7)
{
ok = false;
nonWorkingDays++;
}
}
}
}
printf("%d\n", nonWorkingDays);
}
return 0;
}
该程序运行良好,它完成了它的工作,但是当我将它提交给评委时,我抛出了一个运行时错误,我找不到它在哪里。
解决方案
vector<vector<int>> hartals(2);`
在外部 s`中构造两个条目,vector
在内部vector
s` 中不构造条目。
但是我们有
for (int i = 0; i < testcases; i++)
{
...
hartals[i].resize(parties[i]);
testcases
可能不是 2,因此i
很容易越界并调用可怕的Undefined Behavior。在您的机器上,程序表现出看似“有效”的行为。在评判系统上,你运气更好,程序崩溃。听起来很奇怪,崩溃是好运。通过崩溃,你知道你有一个错误。
给
vector<vector<int>> hartals(testcases);
一个测试,看看它是否有帮助。那里可能有更多错误,但这可能是您现在绊倒的错误。
推荐阅读
- angular - 测试 UpgradeComponent 抛出 NullInjectorError: No provider for $injector!错误
- php - 我想创建 1 个轮播,但让它根据我点击的缩略图显示不同的图像
- linux - 在脚本中,如何使用 ttyecho 获取生成的终端 shell 的 pid 以在其中执行命令?
- typescript - 使用 const 枚举键(不是值)作为接口属性
- entity-framework - 当您需要您还没有的 id 时,这是添加多对多的最佳方法吗?
- python - While Not Loop 运行次数超出预期
- python - PySpark:如何以干净的方式聚合 json 列
- php - 动态 IP 服务器的 Google API 密钥
- javascript - 无法为带有字符串作为参数的角度组件创建构造函数
- python - 在python中添加到列表时如何添加椭圆括号