codechef Popular Rice Recipe题解

来源:互联网 发布:政治家族 知乎 编辑:程序博客网 时间:2024/06/05 14:07

Popular Rice Recipe

Did you know that there are over 40,000 varieties of Rice in the world ? There are so many dishes that can be prepared with Rice too. A famous chef from Mumbai, Tid Gusto prepared a new dish and named it 'Tid Rice'. He posted the recipe in his newly designed blog for community voting, where a user can plus (+) or minus (-) the recipe. The final score is just the sum of all votes, where (+) and (-) are treated as +1 and -1 respectively. But, being just a chef ( and not a codechef ) he forgot to take care of multiple votes by the same user.

A user might have voted multiple times and Tid is worried that the final score shown is not the correct one. Luckily, he found the user logs, which had all the N votes in the order they arrived. Remember that, if a user votes more than once, the user's previous vote is first nullified before the latest vote is counted ( see explanation for more clarity ). Given these records in order ( and being a codechef yourself :) ), calculate the correct final score.

Input

First line contains T ( number of testcases, around 20 ). T cases follow. Each test case starts with N ( total number of votes, 1 <= N <= 100 ). Each of the next N lines is of the form "userid vote" ( quotes for clarity only ), where userid is a non-empty string of lower-case alphabets ( 'a' - 'z' ) not more than 20 in length and vote is either a + or - . See the sample cases below, for more clarity.

Output

For each test case, output the correct final score in a new line

Example

Input:34tilak +tilak +tilak -tilak +3ratna +shashi -ratna -3bhavani -bhavani +bhavani -Output:1-2-1

模拟统计论坛投票。

使用map容器,很方便解决。

#pragma once#include <cstdio>#include <string>#include <unordered_map>#include <iostream>class PopularRiceRecipe{std::unordered_map<std::string, bool> umSi;public:void run(){int T;scanf("%d", &T);while (T--){int n;scanf("%d", &n);umSi.clear();std::string str;char a;while (n--){std::cin>>str;//std::cin>>a;scanf("\n%c\n", &a);if ('-' == a) umSi[str] = false;else umSi[str] = true;//only count the last vote}int votes = 0;for (auto x:umSi){if (x.second) votes++;else votes--;}printf("%d\n", votes);}}};int popularRiceRecipeRun(){PopularRiceRecipe prr;prr.run();return 0;}




1 0