之前做过的oj, acm题目忘了很多了, 又要开始要刷题了, go on!

#1260 : String Problem I

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

我们有一个字符串集合S,其中有N个两两不同的字符串。

还有M个询问,每个询问给出一个字符串w,求有多少S中的字符串可以由w添加恰好一个字母得到。

字母可以添加在包括开头结尾在内的任意位置,比如在"abc"中添加"x",就可能得到"xabc", "axbc", "abxc", "abcx".这4种串。

输入

第一行两个数N和M,表示集合S中字符串的数量和询问的数量。

接下来N行,其中第i行给出S中第i个字符串。

接下来M行,其中第i行给出第i个询问串。

所有字符串只由小写字母构成。

数据范围:

N,M<=10000。

S中字符串长度和<=100000。

所有询问中字符串长度和<=100000。

输出

对每个询问输出一个数表示答案。

样例输入
3 3
tourist
petr
rng
toosimple
rg
ptr
样例输出
0
1
1

二分查找,在大型数组中很常用。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cmath>
using namespace std;
const int maxn = 10005; struct Node{int len; string s;
}nd[maxn];
int n,m; int Match(const string &s1, const string &s2){bool isPlus = true; int j = 0; for(int i=0; i<s1.length(); i++){if(s1[i] != s2[j]){if(isPlus){isPlus = false; }else{return false; }}else{j++; }}return true;
}int cmp(const void* a, const void* b){Node* aa = (Node *)a; Node* bb = (Node *)b; return aa->len - bb->len;
}int main(){freopen("in.txt", "r", stdin); int i,j, mid, left, right, target_len, test_start, cnt; string target; scanf("%d %d", &n, &m ); getchar(); for(int i=0; i<n; i++){cin>>nd[i].s;nd[i].len = nd[i].s.length();  }qsort(nd, n, sizeof(nd[0]), cmp); for(i=0; i<m; i++){cin>>target; target_len = target.length() + 1; left = 0; right = n-1; test_start = -1; while(left <= right){mid = left + (right - left)/2; if(nd[mid].len == target_len){j = mid-1; while(j>=0 && nd[j].len == nd[mid].len){j--; }test_start = j + 1; break; }else if(nd[mid].len > target_len){right = mid - 1; }else{left = mid + 1; }}if(test_start == -1){printf("%d\n", 0);}else{cnt = 0; for(j=test_start; nd[j].len == target_len; j++){if(Match(nd[j].s, target)){cnt++; }}printf("%d\n", cnt);}}return 0;
}

  

转载于:https://www.cnblogs.com/zhang-yd/p/5774420.html

hihocoder 1260相关推荐

  1. hihoCoder 网络流四·最小路径覆盖

    题面带解释 hihoCoder感觉很好. 网络流的精华就是建图 #include<cstdio> #include<iostream> #include<algorith ...

  2. hihoCoder #1142 : 三分求极值

    #1142 : 三分·三分求极值 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 这一次我们就简单一点了,题目在此: 在直角坐标系中有一条抛物线y=ax^2+bx+c和一 ...

  3. hihocoder 后缀自动机专题

    一.后缀自动机基本概念的理解 1.首先后缀自动机的状态是由子串的endpos来决定的 子串的endpos是指一个子串可以在原字符串的哪些位置进行匹配, endpos构成的不同集合划分成不同的状态 关于 ...

  4. hihoCoder 1051 补提交卡(贪心,枚举)

    #1051 : 补提交卡 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过 ...

  5. hihoCoder week3 KMP算法

    题目链接 https://hihocoder.com/contest/hiho3/problems kmp算法 #include <bits/stdc++.h> using namespa ...

  6. hihoCoder 第136周 优化延迟(二分答案+手写堆)

    题目1 : 优化延迟 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho编写了一个处理数据包的程序.程序的输入是一个包含N个数据包的序列.每个数据包根据其重要程度不同 ...

  7. hihoCoder 1578 Visiting Peking University 【贪心】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)...

    #1578 : Visiting Peking University 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Ming is going to travel for ...

  8. hihoCoder太阁最新面经算法竞赛18

    比赛链接:http://hihocoder.com/contest/hihointerview27/problems A.Big Plus 模拟水 1 #include <bits/stdc++ ...

  9. hihocoder 1061.Beautiful String

    题目链接:http://hihocoder.com/problemset/problem/1061 题目意思:给出一个不超过10MB长度的字符串,判断是否里面含有一个beautiful strings ...

最新文章

  1. c2 链路_POS链路不能打开的解决办法
  2. python mainloop bind_Python3 tkinter基础 Frame bind 捕捉多键同时按
  3. Python模块包中__init__.py文件的作用(转载)
  4. Unity游戏中的一些规范和优化建议
  5. Apache Commons SCXML:有限状态机实现
  6. [Leetcode][第392题][JAVA][判断子序列][动态规划][双指针]
  7. python简单爬虫(一)
  8. Bug调试(lldb)
  9. 关于Struts+Spring+Hibernate的理解
  10. ktv 上传图片 1218
  11. C++奇特的递归模板式
  12. ceb怎么转换成word_如何将ceb文件转成word_ceb文件转成word的详细步骤-系统城
  13. 序列号大全,装机必备
  14. Linux 配置vim
  15. java数据清洗_数据清洗例子
  16. C++友元与操作符重载
  17. 淘宝开源深度学习端侧推理引擎 MNN
  18. 微信公众号发送客服消息(文本、图文)和模板消息
  19. 在Android Studio中的混淆debug与release
  20. 阿里代码规约:手动创建线程池,效果会更好哦

热门文章

  1. Visual c++6.0 如何自定义一个光标,使其变成字
  2. 实现 ASP.NET WebForm Client
  3. 在 Windows 上部署 gitblit
  4. 从spring-session存储结构探讨session存储方案的演变
  5. Hi3516A开发--接触
  6. es java api 创建索引结构_elasticsearch - 如何使用ES的Java API来创建一个新类型的索引 - SO中文参考 - www.soinside.com...
  7. 【译】Introducing scrcpy
  8. Android短信发送流程之多收件人发送(原)
  9. ANDROID STUDIO详细教程汇总
  10. Android Linux内核编译调试