저는 C++의 초보자이며 최근에는 선물 제공에 관한 USACO 교육 프로그램을 진행하고있었습니다. 그러나 산출물에는 관련된 모든 사람의 이름과 각각의 현금 금액이 나와야하는데, 광산은 항상 모두 0으로 끝납니다. 여기 내 코드는 다음과 같습니다.지도의 지정이 0으로 끝나나요?
/*
ID: afuhrtr1
PROG: gift1
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <map>
using namespace std;
int main() {
stringstream ss;
ofstream fout ("gift1.out");
ifstream fin ("gift1.in");
int np;
fin >> np;
string people [np];
map<string, int> amounts;
for (int i = 0; i < np; i++)
{
string name;
fin >> name;
//amounts[name]=0;
people[i] = name;
}
while (fin.good())
{
string giver;
fin >> giver;
string twoNumbers;
fin >> twoNumbers;
int spacePos = twoNumbers.find(' ');
int amount;
ss << twoNumbers.substr(0, spacePos);
ss >> amount;
int npgiven;
ss << twoNumbers.substr(spacePos+1);
ss >> npgiven;
for (int i = 0; i < npgiven; i++)
{
string name;
fin >> name;
amounts[name]+=(amount/npgiven);
}
amounts[giver]+=(amount % npgiven - amount);
}
map<string, int>::iterator it;
for (int i = 0; i < np; i++)
fout << people[i] << " " << amounts[people[i]] << endl;
return 0;
}
지도 요소에 stuff 또는 fin.good() 호출을 할당하는 것으로 가정합니다.
NP의 그룹 (2 ≤ 순이익 ≤ 10) 고유 한 이름의 친구가 돈 선물을 교환하기로 결정했다 :
또한, 여기에 대회 시나리오입니다. 이 친구들 각각은 다른 친구들의 일부 또는 전부에게 돈을 줄 수도 있고 아닐 수도 있습니다. 마찬가지로 각 친구는 다른 친구의 일부 또는 전체로부터 돈을받을 수도 있고받지 못할 수도 있습니다. 이 문제의 목표는 각 사람이받는 돈보다 얼마나 많은 돈을 추론하는 것입니다.
선물 제공 규칙은 예상했던 것보다 약간 다를 수 있습니다. 각 사람은 선물을주고있는 모든 사람에게이 돈을 균등하게 분배하기 위해 일정 금액의 돈을 따로 마련합니다. 분수돈은 없습니다. 따라서 2 명의 친구 중 3 명을 나누는 것은 남은 1 명이있는 친구에 대해 각각 1 명이됩니다. 남은 1 명이 기부자의 "계좌"에 남게됩니다.
어떤 친구 그룹에서 어떤 사람들은 다른 사람들보다 더 많이 (또는 적어도 더 많은 지인이있을 수 있음), 어떤 사람들은 다른 사람들보다 돈이 많습니다.
14 명 이상의 이름을 가진 친구 그룹이 없으면 그룹의 각자가 선물에 소비하는 돈과 각 사람이 선물을주는 친구 목록이 어떻게 결정되는지 그룹의 각 개인이받은 것보다 훨씬 더 (또는 적게) 제공됩니다.
FORMAT 1 호선INPUT : 단일 정수, NP 라인 2..NP + 1 : 각 행은 그룹 구성원의 이름을 포함 라인 NP + 2..end이 같은 조직 라인의 NP 그룹 : 그룹의 첫 번째 행은 선물을 줄 사람의 이름을 알려줍니다. 그룹의 두 번째 줄에 두 개의 숫자가 있습니다 : 기부자가 선물로 나눌 초기 금액 (범위 : 0..2000)과 기부자가 선물을 줄 사람 수 NGi 0 ≤ NGi ≤ NP-1). NGi가 0이 아닌 경우 다음 NGi 행에 선물 수신자의 이름이 나열됩니다.
정수를 정수로 나눈 값이 원하는 값이 아닐 수 있습니다. – ildjarn
오류를 확인하지 않으므로 성공적으로 읽었 음을 어떻게 확신 할 수 있습니까? 또한 VLA는 C++이 아닙니다. – chris
금액은 항상 npgiven보다 훨씬 클 것이고 division은 고르지 않아야하기 때문에 int/int를 원한다고 생각합니다. USACO에는 디버거가 없으므로 논리 오류를 효과적으로 확인할 수는 없지만 컴파일러 오류는 없습니다. 또한이 VLA는 어디에 있습니까? – aftrumpet