コード例 #1
0
int main()
{
    int n1;
    int ca = 1;
    while (cin >> n1)
    {
        Init();
        for (int i = 0; i < n1; ++i)
        {
            char name[50];
            int cost;
            scanf("%s%d", name, &cost);
            item_getter.insert(make_pair(name, Item(name, cost, NOR)));
        }
        int n2;
        cin >> n2;
        for (int i = 0; i < n2; ++i)
        {
            char name[50];
            int cost;
            char list[300];
            scanf("%s%d:%[^\n]", name, &cost, list);
            item_getter.insert(make_pair(name, Item(name, cost, MIX)));
            vector<pair<string, int> > & vList = mixture[name];
            string slist = list;
            int pos = 0;
           // printf("list='%s'\n", list);
            if(slist.size()<=1) continue;
            while (true)
            {
                int ed = slist.find(',', pos);
                string sub = slist.substr(pos, ed - pos);
                int num;
                sscanf(sub.c_str(), "%s%d", name, &num);
                vList.push_back(pair<string, int>(name, num));
                //printf("dep: %s %d!!\n", name, num);
                if (ed == string::npos) break;
                else pos = ed + 1;
            }
        }
        int n3;
        cin >> n3;
        for (int i = 0; i < n3; ++i)
        {
            char name[50];
            int cost;
            scanf("%s%d", name, &cost);
            item_getter.insert(make_pair(name, Item(name, cost, CUS)));
        }
        Bag bag;
        int cmd_cnt;
        cin>>cmd_cnt;
        while(cmd_cnt--)
        {
            char op;
            char str[1024];
            scanf("%s", str);
            op = str[0];
            string name(str+1);
            if(name[0]>='0'&&name[0]<='9')
            {
                bag.money += atoi(name.c_str());
            }
            else
            {
                if(op=='-') bag.RemoveItem(name);
                else bag.AddItem(name);
            }
            //printf("money = %d\n", bag.money);
            //printf("%c %s\n", op, name.c_str());
        }
        printf("Case %d:\n", ca++);
        printf("%d\n", bag.money);
        printf("%d\n", bag.items.size());
        sort(bag.items.begin(), bag.items.end());
        for(int i=0;i<bag.items.size();++i)
        {
            printf("%s: %d\n", bag.items[i].name.c_str(), bag.items[i].num);
        }
        puts("");
    }
    return 0;
}