HDU 1936 区间贪心
/*
*区间贪心。前几天刚做了POJ 1328 ...思路完全相同...
*最多有100个表情,100行文字。遍历寻找每个表情的所在区间。时间复杂度大约在10^5 ~ 10^6 可以接受。
*然后对每个表情按照右坐标排序。改变表情的最右边的字符。贪心判断是否更改。
*(⊙o⊙)… 每一行的里的表情可能是重复的。所以判断每行要更改的最少字母数。最后求和。很傻逼的全都放一起了。然后。。。。幸福的wa了。
*/
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std; char emo[][];
char txt[][];
int n, m;
int cnt;
int ans; struct E
{
int l, r;
} e[]; int cmp(E a, E b)
{
if (a.l != b.l)
return a.l < b.l;
return a.r < b.r;
} void ask()
{
for (int i=; i<m; ++i) // 遍历文档
{
int lent = strlen(txt[i]);
cnt = ;
for (int j=; j<lent; ++j)
{
for (int k=; k<n; ++k) //遍历表情看是否在当前文档中
{
bool flag = false;
int lene = strlen(emo[k]);
if (j+lene- > lent) continue;
if (txt[i][j] == emo[k][] && txt[i][j+lene-] == emo[k][lene-])
{
flag = true;
for (int p=; p<lene; ++p)
{
if (txt[i][j+p] != emo[k][p])
{
flag = false;
break;
}
}
if (flag)
{
e[cnt].l = j;
e[cnt++].r = j+lene-;
}
}
}
}
e[].l = e[].r = -; // 然而我也不太明白为什么要加上e[0]。
sort(e+, e+cnt, cmp); // 对每个表情按照区间右边的值从大到小排序。 for (int i=cnt-; i>=; --i) // 从后往前遍历。如果上一个的右端点小于当前左端点。ans++。破坏下一个的右端点。
{
if (e[i].l > e[i-].r)
ans += ;
else
{
for (int j=i-; j>=; --j) // 否则直到找到第一个右端点小于当前左端点的位置。破坏它的右端点。ans++。
{
if (e[i].l <= e[j].r);
else
{
i = j+; // 循环结束后还要i--。所以i= j+1。 实际上就是i = j。
ans += ;
break;
}
}
}
} }
} int main()
{
while(cin >> n >> m)
{
if (n == && m == ) break;
for (int i=; i<n; ++i)
{
cin >> emo[i];
}
getchar();
for (int i=; i<m; ++i)
{
gets(txt[i]);
}
ans = ;
ask(); //遍历寻找每个表情的区间范围
cout << ans << endl;
}
return ;
}
HDU 1936 区间贪心的更多相关文章
- HDU 2037 今年暑假不AC (区间贪心)
题意:又是中文题... 析:先说一下区间贪心的一个定理,选择不相交的区间:数轴上有n个开区间(ai, bi).选择尽量多的区间,使得这些区间两两不相交,贪心策略是,一定是选bi小的.(想一下为什么). ...
- hdu 5869 区间不同GCD个数(树状数组)
Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- hdu 4283 区间dp
You Are the One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- hdu 5700区间交(线段树)
区间交 Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...
- HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化
HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...
- TZOJ 4007 The Siruseri Sports Stadium(区间贪心)
描述 The bustling town of Siruseri has just one sports stadium. There are a number of schools, college ...
- Hdu 4864(Task 贪心)(Java实现)
Hdu 4864(Task 贪心) 原题链接 题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个 ...
- UVA-11134 Fabled Rooks 贪心问题(区间贪心)
题目链接:https://cn.vjudge.net/problem/UVA-11134 题意 在 n*n 的棋盘上,放上 n 个车(ju).使得这 n 个车互相不攻击,即任意两个车不在同一行.同一列 ...
- Tunnel Warfare HDU 1540 区间合并+最大最小值
Tunnel Warfare HDU 1540 区间合并+最大最小值 题意 D x是破坏这个点,Q x是表示查询以x所在的最长的连续的点的个数,R是恢复上一次破坏的点. 题解思路 参考的大佬博客 这里 ...
随机推荐
- hdu 3336 Count the string -KMP&dp
It is well known that AekdyCoin is good at string problems as well as number theory problems. When g ...
- hosts 位置和功能
什么是HOST文件: Hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hos ...
- 常用模块之 time,datetime,random,os,sys
time与datetime模块 先认识几个python中关于时间的名词: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“ty ...
- 垒骰子|2015年蓝桥杯B组题解析第九题-fishers
垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的 ...
- HDU 2841 Visible Trees(容斥)题解
题意:有一块(1,1)到(m,n)的地,从(0,0)看能看到几块(如果两块地到看的地方三点一线,后面的地都看不到). 思路:一开始是想不到容斥...后来发现被遮住的地都有一个特点,若(a,b)有gcd ...
- 【附6】hystrix metrics and monitor
一.基本方式 hystrix为每一个commandKey提供了计数器 二.实现流程 https://raw.githubusercontent.com/wiki/Netflix/Hystrix/ima ...
- python自动制作gif并添加文字
引言 最近租的房子快到期了,哎,因为去年是第一次找房子租,结果遇到了一个东北黑中介,押一付三,房子有啥问题,灯坏了,下水道堵了,原来签合同的时候说的客气,说是马上就会上门解决,结果实际上我每次 ...
- 华中农业大学第四届程序设计大赛网络同步赛 G.Array C 线段树或者优先队列
Problem G: Array C Time Limit: 1 Sec Memory Limit: 128 MB Description Giving two integers and and ...
- 查看 rospkg 变量
echo $ROS_PACKAGE_PATH
- WAV文件格式解析及处理
RIFF file format RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构.RIFF文 ...