/*
 *区间贪心。前几天刚做了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 区间贪心的更多相关文章

  1. HDU 2037 今年暑假不AC (区间贪心)

    题意:又是中文题... 析:先说一下区间贪心的一个定理,选择不相交的区间:数轴上有n个开区间(ai, bi).选择尽量多的区间,使得这些区间两两不相交,贪心策略是,一定是选bi小的.(想一下为什么). ...

  2. hdu 5869 区间不同GCD个数(树状数组)

    Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  3. hdu 4283 区间dp

    You Are the One Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  4. hdu 5700区间交(线段树)

    区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  5. HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化

    HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...

  6. TZOJ 4007 The Siruseri Sports Stadium(区间贪心)

    描述 The bustling town of Siruseri has just one sports stadium. There are a number of schools, college ...

  7. Hdu 4864(Task 贪心)(Java实现)

    Hdu 4864(Task 贪心) 原题链接 题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个 ...

  8. UVA-11134 Fabled Rooks 贪心问题(区间贪心)

    题目链接:https://cn.vjudge.net/problem/UVA-11134 题意 在 n*n 的棋盘上,放上 n 个车(ju).使得这 n 个车互相不攻击,即任意两个车不在同一行.同一列 ...

  9. Tunnel Warfare HDU 1540 区间合并+最大最小值

    Tunnel Warfare HDU 1540 区间合并+最大最小值 题意 D x是破坏这个点,Q x是表示查询以x所在的最长的连续的点的个数,R是恢复上一次破坏的点. 题解思路 参考的大佬博客 这里 ...

随机推荐

  1. 怎样用QtCreator编辑运行python脚本

    QtCreator作为一款开发基于qt库的程序.以及开发C语言.c++语言项目都是一个利器,轻便好用.那么作为开发者来说,经常换着使用各种IDE是家常便饭,但是要是这些语言都能够集成到一个工具里岂不是 ...

  2. cygwin下使用apt-cyg安装新软件

    1.获取  (记得先安装好git) git clone https://github.com/transcode-open/apt-cyg.git 2.安装apt-cyg cd apt-cyg chm ...

  3. HDU 3746 Cyclic Nacklace(KMP+最小循环节)题解

    思路: 最小循环节的解释在这里,有人证明了那么就很好计算了 之前对KMP了解不是很深啊,就很容易做错,特别是对fail的理解 注意一下这里getFail的不同含义 代码: #include<io ...

  4. 遍历GroupBox上的所有的textbox

    foreach (Control c in groupBox1.Controls) { if (c is TextBox) { //这里写代码逻辑 } } 遍历的时候,需要用Control遍历: 如果 ...

  5. 【第三十章】 elk(1) - 第一种架构(最简架构)

    软件版本: es:2.4.0 logstash:2.4.0 kibana:4.6.1 一.logstash安装(收集.过滤日志.构建索引) 1.下载:https://www.elastic.co/do ...

  6. BZOJ 3555: [Ctsc2014]企鹅QQ

    似乎大家全部都用的是hash?那我讲一个不用hash的做法吧. 首先考虑只有一位不同的是哪一位,那么这一位前面的位上的字符一定是全部相同,后面的字符也是全部相同.首先考虑后面的字符. 我们对n个串的反 ...

  7. DataTables warning: table id=data-table - Requested unknown parameter '3' for row 0.

    本文为博主原创,未经允许,不得转载: 在使用jquery 的datatable时,报错在页面弹出弹出框,并提示以下内容: DataTables warning: table id=data-table ...

  8. ajax用beforeSend自定义请求过程中客户端事件,提高用户体验

    本文为博主原创,未经允许不得转载: 在应用ajax的过程中,当我们再前台提交请求的时候,如果服务端响应事件比较长,就会导致需要等很长时间在前台才能接受到服务端返回的 响应结果,往往会导致用户重复点击按 ...

  9. 【Android实验】 数据存储与访问sqlite

    目录 实验目的 实验要求 实验过程 功能分析: 实验结果: 实验的代码 实验总结 实验目的     分别使用sqlite3工具和Android代码的方式建立SQLite数据库.在完成建立数据库的工作后 ...

  10. NOI 8467 鸣人的影分身

    http://noi.openjudge.cn/ch0206/8467/ 描述 在火影忍者的世界里,令敌人捉摸不透是非常关键的.我们的主角漩涡鸣人所拥有的一个招数——多重影分身之术——就是一个很好的例 ...