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