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是恢复上一次破坏的点. 题解思路 参考的大佬博客 这里 ...
随机推荐
- tf.random_uniform的使用
tf.random_uniform((4, 4), minval=low,maxval=high,dtype=tf.float32)))返回4*4的矩阵,产生于low和high之间,产生的值是均匀分布 ...
- Android学习笔记之 ActionBar
http://developer.android.com/guide/topics/ui/actionbar.html 1,ActionBar的几种形式 2,使用ActionBar需要Activity ...
- Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1)
A - Toy Train 很显然,一个站有多少个糖,那么就要从这个点运多少次.设第i个点有\(a_i\)个糖,那么就要转\(a_i-1\)圈,然后再走一段.很显然最后一段越小越好. 然后枚举起点后, ...
- html5标签 H5标签
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...
- OpenFlow protocol version 1.0 通信过程
参考 李呈:[原创]OpenFlow通信流程解读 OpenFlow protocol version 1.0 通信过程 通信双方: OpenFlow控制器,OpenFlow交换机. 通信模块: Sec ...
- C# String.Join 与 StringBuilder 对比,谁更快
String.Join 文档 StringBuilder 文档 这两天刷 Leedcode 做到一道 String 的题时突然想到这俩对比的问题,于是查了一下资料并简单对比了一下. 首先对于 ...
- BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)
http://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 思路:真的是好题啊! 对于这种题目,很有可能就是dp,$f[i][j]$表示分析到第 ...
- python flask 接口
例子1 from flask import Flask, jsonify app = Flask(__name__) tasks = [ { , 'title': u'Buy groceries', ...
- ubuntu 14.04 安装 gflags
1.下载 git clone https://github.com/gflags/gflags 2.编译 进入源码目录(即gflags文件夹) cmake . make -j 24 sudo make ...
- Phpstorm配置scss不生成缓存
--no-cache 加上这个,就不会生成 .sass-cache 文件夹了.