地图中的分配最终为0?

时间:2012-11-17 01:56:39

标签: c++ map

我是C ++的初学者,最近我正在开展有关赠送礼物的USACO培训计划。然而,虽然输出应该显示所涉及的每个人的名字和他们各自的现金数额,但我的总是最终为全零。这是我的代码:

/*
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;
}

我假设问题是将内容分配给地图元素,或者是fin.good()调用。

此外,还有比赛场景:

一群NP(2≤NP≤10)独特的朋友决定交换金钱的礼物。这些朋友中的每一个可能会或可能不会向任何或所有其他朋友提供一些钱。同样,每个朋友可能会或可能不会从任何或所有其他朋友那里收钱。你在这个问题上的目标是推断每个人给予的收入比收到的多多少。

赠送礼物的规则可能与您预期的不同。每个人都留出一定数量的钱给予并将这笔钱平均分配给他或她送给他们的所有人。没有可用的小数部分资金,因此将2个朋友中的3分别为剩下1个的朋友分别为1个 - 剩下的1个留在给予者&#34;帐户&#34;。

在任何一群朋友中,有些人比其他人更有奉献(或者至少可能有更多的熟人),有些人比其他人有更多的钱。

鉴于一群朋友,其中没有一个人的姓名超过14个字符,该组中每个人花在礼物上的钱,以及每个人送给他们的礼物的(子)列表,决定了多少组中每个人给予的比他们收到的更多(或更少)。

输入格式 第1行:单个整数,NP 第2..NP + 1行:每行包含一个组成员的名称 行NP + 2..end:NP组的行组织如下: 小组的第一行告诉该人的姓名将赠送礼物。 该组中的第二行包含两个数字:初始金额(在0..2000范围内)由提供者分成礼物,然后是给予者赠送礼物的人数,NGi(0 ≤Nii≤NP-1)。 如果NGi非零,则下一个NGi行中的每一行都列出礼物接收者的姓名。

1 个答案:

答案 0 :(得分:0)

  

USACO没有任何类型的调试器,因此我不确定我是否可以有效地检查逻辑错误,但没有编译器错误。

这是你的主要问题。

当然,您可以在具有调试器的环境中运行此代码吗?有免费的C ++开发环境。没有调试器就无法编写C ++代码。 StackOverflow不是一个高效的调试器;)