洛谷 P2264 情书
题目背景
一封好的情书需要撰写人全身心的投入。lin_toto同学看上了可爱的卡速米想对她表白,但却不知道自己写的情书是否能感动她,现在他带着情书请你来帮助他。
题目描述
为了帮助lin_toto,我们定义一个量化情书好坏的标准感动值。判断感动值的方法如下:
1.在情书的一句话中若含有给定词汇列表中的特定单词,则感动值加1,但每一单词在同一句话中出现多次感动值不叠加,不同单词不受影响。保证输入的单词不重复。
2.每句话以英文句号定界。
3.全文不区分大小写。
输入输出格式
输入格式:
第一行包含一个数字n,表示导致感动值提升的词汇列表中单词的数量,随后n行是给定单词,每行一个。保证单词只包含英文字母。
最后一行为情书正文,保证只包含以下几种字符: 英文字母、数字、空格、英文逗号、英文句号。
输出格式:
一个数字g,表示情书带来的感动值。
输入输出样例
3
love
so
much
I love you so much.
3
说明
对于所有的数据,保证1 ≤ n,m,k ≤ 100,每个单词不超过50字符,全文不超过1000字符。
stl->set
这题是问句子中包含多少个感动的词 ,非常水是吧 ?
然后我萌萌的交了7次AC自动机,最高分40。。才发现 妈的这题和子串一点关系没有!
三个小时的时间啊╮(╯▽╰)╭
#include <cstring>
#include <cstdio>
#include <queue>
#define MAXN 1000010
int size=,n,num[MAXN],trie[MAXN][],fail[MAXN];
inline void ins(int Num,char *a)
{
int p=;
for(char *q=a;*q;q++)
{
int id=*q-'A';
if(!trie[p][id]) trie[p][id]=++size;
p=trie[p][id];
}
num[p]=Num;
}
std::queue<int>q;
void build()
{
for(int i=;i<=;i++) trie[][i]=;
q.push();
for(;!q.empty();q.pop())
{
int now=q.front();
for(int i=;i<=;i++)
{
if(trie[now][i])
{
if(now==) fail[trie[now][i]]=;
else
{
int tmp=fail[now];
for(;tmp;tmp=fail[tmp])
{
if(trie[tmp][i])
{
fail[trie[now][i]]=trie[tmp][i];
break;
}
}
if(!tmp) fail[trie[now][i]]=;
}
q.push(trie[now][i]);
}
}
}
}
bool vis[MAXN];
int query(char *a,int len)
{
memset(vis,,sizeof(vis));
int p=,ans=;
for(int i=;i<len;i++)
{
int id=a[i]-'A';
for(;!trie[p][id];p=fail[p]);
p=trie[p][id];
int now=p;
for(;now;now=fail[now])
{
if(num[now]&&!vis[num[now]])
{
vis[num[now]]=;
ans++;
}
}
}
return ans;
}
int main()
{
scanf("%d",&n);
char word[],a[];
for(int i=;i<=n;i++)
{
scanf("%s",word);
for(int j=;j<strlen(word);j++)
if(word[j]>='a'&&word[j]<='z')
word[j]-=;
ins(i,word);
}
build();
int k=,ans=;
char ch=getchar();
for(;scanf("%c",&ch)==;)
{
if(ch=='\n') break;
else if(ch=='.')
ans+=query(a,k),k=;
else if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{
if(ch>='a'&&ch<='z') a[k]=ch-;
else a[k]=ch;
k++;
}
else continue;
}
printf("%d",ans);
return ;
}
萌萌的40分AC自动机
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <string>
#include <set> using namespace std;
set<string>se,se2;
int ans,n;
int main()
{
scanf("%d",&n);
string a;
for(int i=;i<=n;i++)
{
cin>>a;
for(int i=;i<a.length();i++) if(a[i]>='a'&&a[i]<='z') a[i]-=;
se.insert(a);
}
char ch=getchar();
string b;
while(scanf("%c",&ch)==)
{
if(ch=='\n') break;
if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
{
if(ch>='a'&&ch<='z')
ch=ch-;
b+=ch;
}
else
{
if(!b.empty())
{
if(se.count(b))
se2.insert(b);
b.clear();
}
if(ch=='.') ans+=se2.size(),se2.clear(); }
}
printf("%d\n",ans);
return ;
}
洛谷 P2264 情书的更多相关文章
- 洛谷P2264 情书
P2264 情书 88通过 971提交 题目提供者lin_toto 标签字符串 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 yyy快把题目改回来 噫 这题的题目好逗啊... 情书std ...
- 题解【洛谷P2264】情书
题面 看到每一单词在同一句话中出现多次感动值不叠加,一眼想到 \(\text{set}\). 首先将词汇列表中的单词存储起来,我用的是 \(\text{set}\). 对于每一个句子的单词,我们可以先 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
- 洛谷P1371 NOI元丹
P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交 讨论 题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...
- 洛谷P1538迎春舞会之数字舞蹈
题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
随机推荐
- 关于使用quartz动态增删改定时任务
1. 首先, 还是喜闻乐见的导包 <dependency> <groupId>org.springframework.boot</groupId> <arti ...
- Game with Powers
题意: 有1~n,n个数字,两个人轮流操作,每一次一个人可以拿一个数字$x$,之后$x, x^2, x^3....x^t$全都被删掉. 给定n,问最优策略下谁赢. 解法: 考虑SG函数,可以注意到题目 ...
- Excel的poi缓存问题
Excel的poi缓存问题 背景: 最近工作需要,需要完成生成新的Excel,然后从Excel中读取包含公式的文本内容. 问题: 当程序中修改公式对应的单元格数据变化时,公式获取的值仍然还是原来的值, ...
- python 数据可视化
一.基本用法 import numpy as np import matplotlib.pyplot as plt x = np.linspace(-1,1,50) # 生成-1到1 ,平分50个点 ...
- linux tar命令及解压总结
把常用的tar解压命令总结下,当作备忘: tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其 ...
- supervisor简明教程
一.supervisor是什么 Linux的后台进程运行有好几种方法,例如nohup,screen等,但是,如果是一个服务程序,要可靠地在后台运行,我们就需要把它做成daemon,最好还能监控进程状态 ...
- POJ2406【KMP-next数组】
关于next的解释原文:点点点 //#include <bits/stdc++.h> #include<cstdio> #include<string.h> #in ...
- 换装demo时美术遇到的问题详解
1.武器替换:MAX的东西进Unity,根骨骼X轴会有270度的旋转. 解决方法:由程序强制武器进入Unity后的旋转角度. 2.蒙皮问题:face和hair等脖子以上部位蒙皮的时候,导入Unity后 ...
- Unity AnimatorController注意事项
通过assetbundle加载的单独打包AnimatorController使用下面方法赋值 Go.GetComponent<Animator>().runtimeAnimatorCont ...
- Unity3d 3d角色换装实现原理及步骤
http://www.cnblogs.com/dosomething/archive/2012/04/15/2450526.html 1.角色模型制作 unity3d支持Skin动画 但是不支持Ph ...