题目大意:给出一个文章t和n个字符串s1,s2...sn;

  问能否用这n个字符串将整个文章覆盖;

思路:贪心(最小区间覆盖)

  记录每个字符串能够覆盖的所有位置(起点,终点,编号)

  排序后贪心的求出是否能够将所有点覆盖

 1 # include<iostream>
2 # include<bits/stdc++.h>
3 using namespace std;
4 # define int long long
5 # define endl "\n"
6 const int N = 2e5 + 10, INF = 0x3f3f3f3f3f;
7 struct node {
8 int l, r, id;//起点,终点,编号
9 };
10 string s;
11 bool cmp(node a, node b) {
12 if (a.l != b.l) return a.l < b.l;
13 return a.r < b.r;
14 }
15 vector<node> se;
16 int length;
17
18 bool check(int start, string t) {
19 int maxv = length - start + 1;
20 if (maxv < t.size()) return false;
21 for (int i = start, j = 0; i <= start + t.size() - 1; ++i, ++j) {
22 if (t[j] != s[i]) return false;
23 }
24 return true;
25 }
26
27 void solve() {
28
29 int n;
30 cin >> s >> n;
31 se.clear();
32 length = s.size();
33 s = "?" + s;
34 for (int i = 1; i <= n; ++i) {
35 string t;
36 cin >> t;
37 int len = t.size();
38 for (int j = 1; j <= length; ++j) {
39 if (check(j, t)) se.push_back({j, j + len - 1, i});//记录每个字符串能够覆盖的点
40 }
41 }
42 sort(se.begin(), se.end(), cmp);//以起始点为基准从小到大排序
43 bool ok = false;
44 int start = 1, ed = length;
45 vector<pair<int, int>> ans;
46 for (int i = 0; i < se.size(); ++i) {
47 int j = i, r = -INF;
48
49 int t = 0;
50 while (j < se.size() && se[j].l <= start) {
51 if (se[j].r > r) //寻找能够覆盖区间最长的字符串
         {
52 r = se[j].r;
53 t = j;
54 }
55 j++;
56 }
57 if (r < start) break;
58 start = r+1,i = j-1;
59 ans.push_back({se[t].id,se[t].l});
60 if(r>= ed){
61 ok = true;
62 break;
63 }
64 }
65 if(ok){
66 cout<<ans.size()<<endl;
67 for(auto it:ans)cout<<it.first<<" "<<it.second<<endl;
68 }
69 else cout<<-1<<endl;
70 }
71 int tt;
72 signed main() {
73 ios::sync_with_stdio(false);
74 cin.tie(0);
75 cout.tie(0);
76 cin >> tt;
77 while (tt--)solve();
78
79
80 return 0;
81 }

Codeforces Round #811 (Div. 3)D. Color with Occurrences的更多相关文章

  1. 贪心 Codeforces Round #135 (Div. 2) C. Color Stripe

    题目传送门 /* 贪心:当m == 2时,结果肯定是ABABAB或BABABA,取最小改变量:当m > 2时,当与前一个相等时, 改变一个字母 同时不和下一个相等就是最优的解法 */ #incl ...

  2. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  3. Codeforces Round #368 (Div. 2) A. Brain's Photos (水题)

    Brain's Photos 题目链接: http://codeforces.com/contest/707/problem/A Description Small, but very brave, ...

  4. Codeforces Round #485 (Div. 2) A. Infinity Gauntlet

    Codeforces Round #485 (Div. 2) A. Infinity Gauntlet 题目连接: http://codeforces.com/contest/987/problem/ ...

  5. Codeforces Round 254 (Div. 2)

    layout: post title: Codeforces Round 254 (Div. 2) author: "luowentaoaa" catalog: true tags ...

  6. Codeforces Round #603 (Div. 2) A. Sweet Problem(水.......没做出来)+C题

    Codeforces Round #603 (Div. 2) A. Sweet Problem A. Sweet Problem time limit per test 1 second memory ...

  7. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  8. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  9. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

随机推荐

  1. jbd2的死锁分析

    已经运行多年的jbd2,它还是死锁了 背景:这个是在centos7的环境上复现的,内核版本为3.10.0-957.27.2.el7 下面列一下我们是怎么排查并解这个问题的. 一.故障现象 oppo云内 ...

  2. [CF1519C] Berland Regional (数论分块)

    题面 有 n 个学生和 n 所大学,每个学生在其中一所大学中学习,且各有一个能力值 s i s_i si​ . 某次组队打比赛的召集令会给一个数字 k ,表示团队数量.然后每所大学会先把自己的所有学生 ...

  3. metasploit进行局域网远控

    用metasploit进行局域网远程控制 Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全 ...

  4. 大促活动如何抵御大流量 DDoS 攻击?

    每一次活动大促带来的迅猛流量,对技术人而言都是一次严峻考验.如果在活动期间遭受黑产恶意DDoS攻击,无疑是雪上加霜.电商的特性是业务常态下通常不会遭受大流量DDoS攻击,且对延迟敏感,因此只需要在活动 ...

  5. Centos下使用containerd管理容器:5分钟从docker转型到containerd

    目录 一.系统环境 二.前言 三.containerd 四.部署containerd 4.1 安装containerd 4.2 containerd配置文件 4.3 配置containerd阿里云镜像 ...

  6. 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(完)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  7. Java SE 6、super关键字,包

    1.super关键字 super代表父类的引用,用于访问父类的属性,方法,构造器 super可以访问父类的属性,但不能访问父类的 private 属性 super.属性名; 可以访问父类的方法,不能访 ...

  8. ProxySQL 配置ProxySQL

    转载自:https://www.jianshu.com/p/212397a1be67 假定你已经对ProxySQL的架构有所了解.本文对ProxySQL的所有配置都是使用Admin管理接口完成的,该管 ...

  9. Centos安装nodejs,npm (压缩包)

    下载node阿里云镜像(推荐) 地址:https://npm.taobao.org/mirrors/node/latest-v14.x/ 选择自己要下载的版本,这里我选择的v14.6.0 cd /us ...

  10. MySQL数据表更新模板

    -- ---------------------------- -- 新增表 -- ---------------------------- CREATE TABLE `biz_circle_lead ...