名字的价值

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

集训终于开始了,参加集训的人很多,也就有很多名字,集训组织者发现了一件很神奇的事情,竟然可以用一个神奇的字符串表示所有人的名字。该字符串的所有子串都对应着一个人的名字。然后他给一些名字设定了一个价值(没有设定到的,价值为0)。现在求所有人名字的价值和。
字符串的子串指的是如ABC的子串有A,B,C,AB,BC,ABC。

Input:

输入包含多组数据,对于每组数据首先是一个整数n(1<=n<=1000),接下来n行输入一个名字si(1<=length<=100)和一个价值vi(0=<vi<=100)。保证输入的所有名字不同,并且只包含字母,区分大小写。
接下来是输入一个神奇的字符串s(1<=length<=100)。

Output:

对于每组数据,输出所有人名字的价值和。

Sample Input:

3
A 3
B 5
ABC 7
ABC
2
AA 2
B 2
AAAB

Sample Output:

15
6
解题思路:题目的意思就是计算所有子串的价值总和,其中子串必须是由连续字符组成的。做法:从下标0位置开始查找是否含有每个子串,如果有(string.find(string,pos(size_t类型))返回的是第一次出现的位置)就将pos加1后继续查找,只要不返回string::npos,都将其价值累加,水过!
AC代码:
 #include<bits/stdc++.h>
using namespace std;
const int maxn = ;
string rst,obj[maxn];int val[maxn];
size_t pos,n,sum;
int main(){
while(~scanf("%d",&n)){getchar();//吃掉回车符对字符串的影响
for(size_t i=;i<n;++i)cin>>obj[i]>>val[i];
cin>>rst;sum=;
for(size_t i=;i<n;++i){pos=;//从下标0开始查找
while((pos=rst.find(obj[i],pos))!=string::npos){sum+=val[i];pos+=;}
}
printf("%d\n",sum);
}
return ;
}

最新文章

  1. Learning Roadmap of Robotic Operating System (ROS)
  2. 更改make/bison的版本
  3. 利用js、css、html固定table的列头不动
  4. 例题-Quota 实作:
  5. Java自定义日志输出文件
  6. Java Web SSH框架总是无法写入无法读取Cookie
  7. mysql 按日期查询
  8. 在SQL Server中用好模糊查询指令LIKE
  9. 使用CodeDOM动态编译一个字符串表达式
  10. memcached经典问题和现象
  11. iOS 使用NTP时间同步服务
  12. SQL 语法使用
  13. 目前在segmentfault写博客
  14. Git 将本地库添加到远程仓库
  15. XSS代码注入框架
  16. PAT 乙级 1038 统计同成绩的学生C++版
  17. jenkins坑—— shell 命令返回空导致构建失败
  18. day 82 URL分发
  19. 微商营销实战技巧分享,轻松月入10W
  20. 【C】——指针与const限定符

热门文章

  1. 【转】下载对应内核版本的asmlib
  2. Dinic当前弧优化 模板及教程
  3. Mac下对Android apk反编译
  4. BZOJ 1601 USACO 2008 Oct. 灌水
  5. 车展(vijos P1459)
  6. 激活Windows
  7. 解决maven打包编译出现File encoding has not been set问题
  8. hdu_1041_Computer Transformation_201311051648
  9. 相同的雪花 Hash
  10. Spring MVC 注解基础