UVa 11340 Newspaper

News agency pays money for articles according to some rules. Each character has its own value (somecharacters may have value equals to zero). Author gets his payment as a sum of all character’s valuesin the article. You have to determine the amount of money that news agency must pay to an author.

Input

The first line contains integer N (0 < N 5), it is a number of tests. Each test describes an integerK (0 < K 100), the number of paid characters. On next K lines there are table of paid charactersand its values (character values are written in cents). If character can not be found in the table, thenits value is equal to zero. Next, there is integer M (0 < M 150000). Next M lines contain an articleitself. Each line can be up to 10000 characters length. Be aware of a large input size, the whole inputfile is about 7MB.

Output

For each test print how much money publisher must pay for an article in format ‘x.yy$’. Where x isa number of dollars without leading zeros, and yy number of cents with one leading zero if necessary.Examples: ‘3.32$’, ‘13.07$’, ‘71.30$’, ‘0.09$’.

Sample Input

1
7
a3
W 10
A 100
, 10
k7
.3
I 13
7
ACM International Collegiate Programming Contest (abbreviated
as ACM-ICPC or just ICPC) is an annual multi-tiered competitionamong the universities of the world. The ICPC challenges studentsto set ever higher standards of excellence for themselves
through competition that rewards team work, problem analysis,
and rapid software development.
From Wikipedia.

Sample Output

3.74$ 


题目描述:字符有数值,给一串文本,求字符数值之和。因文件较大,使用getchar()读入。注意C++标准中char可能是unsigned也可能是signed。这题的字符需要使用unsigned char,不然会WA。运行时间30ms。

/*
	PROG: UVa11340
*/

#include <cstdio>
#include <cstring>
#include <cctype>
using namespace std;

int val[300];
typedef long long LL;

#define DEBUG 0
#define LOG(...) do { if (DEBUG) fprintf(stderr, __VA_ARGS__); } while(0)
int main(void) {
	int Z; scanf("%d", &Z);
	for (int z = 0; z < Z; ++z) {
		int n; scanf("%d", &n);
		getchar();
		memset(val, 0, sizeof(val));
		for (int i = 0; i < n; ++i) {
			unsigned char ch = getchar();
			int v; scanf("%d", &v);
			val[ch] = v;
			getchar();
		}
		LOG("val done\n");
		int m; scanf("%d", &m);
		getchar();
		LL ans = 0;
		while (m) {
			unsigned char ch = getchar();
			LOG("%c", ch);
			ans += val[ch];
			if (ch == '\n') --m;
		}
		printf("%lld.%02lld$\n", ans/100, ans%100);
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值