我正在执行USACO任务,并且平地机输出4,而我的机器给出3,是正确的答案。
输入为:
4
7 Mildred +3
4 Elsie -1
9 Mildred -1
1贝茜+2
我已通过调试器运行此程序,未发现任何问题。
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <fstream>
using namespace std;
int N, bmilk=7, emilk=7, mmilk=7;
int bboard=0, eboard=0, mboard=0;
int ans=0;
vector<pair<int,pair<string,int>>> a;
int main()
{
ofstream fout("measurement.out");
ifstream fin("measurement.in");
fin >> N;
for (int i = 0; i < N; i++)
{
int d, chg;
string c;
fin >> d >> c >> chg;
a.push_back(make_pair(d,make_pair(c,chg)));
}
sort(a.begin(), a.end());
for (int i = 0; i < N; i++)
{
if (a[i].second.first=="Bessie") bmilk+=a[i].second.second;
else if (a[i].second.first=="Elsie") emilk+=a[i].second.second;
else mmilk+=a[i].second.second;
int best_milk = max(bmilk,max(emilk,mmilk));
int curr_board[4];
for (int j = 0; j < 3; j++) curr_board[i]=0;
if (bmilk==best_milk) curr_board[0]=1;
if (emilk==best_milk) curr_board[1]=1;
if (mmilk==best_milk) curr_board[2]=1;
if (curr_board[0]!=bboard||curr_board[1]!=eboard||curr_board[2]!=mboard)
{
ans++;
bboard=curr_board[0];
eboard=curr_board[1];
mboard=curr_board[2];
}
}
fout << ans << "\n";
return 0;
}
有人可以帮我找到导致此错误的原因吗?
答案 0 :(得分:1)
您读取了curr_board
的未初始化元素,并且也有可能使它超载。
问题是该行用于初始化多个元素,而是一遍又一遍地分配相同的元素:
for (int j = 0; j < 3; j++) curr_board[i]=0;
读取未初始化的值是未定义的行为,并且很容易在不同的机器上导致不同的结果。同上用于越界访问。
为什么curr_board
的尺寸为4?