zoukankan      html  css  js  c++  java
  • 牛客练习赛17 B-好位置

    传送门

    题意:本来惯例中文题不解释的, 但是有些人不懂这个题意, 简单的来说, 就是s1每一个的每一个字符都可以和别的字符构成一个子串 == s2。  算了还是惯例中文题意不解释吧。

    题解:其实以前写nowcoder的比赛的时候,已经被nowcoder的数据给震惊过了,可是昨天发现有人交随机数过的,有人交Java套数据过的,汗,然后中午被某人催了写一下这个题目。

    其实很简单,对于s1, 我们从开头匹配出最先的s2子串,并且对应的位置记录下L[i], 在从末尾开始匹配出最后的s2子串,并且记录下对应的位置R[i]。 其中i表示为s2的第i个字符。

    然后对于第i个字符c来说,   所有位置在 L[i] 和 R[i] 之间的 c 都是合法的, 因为 我们可以取 L[i]的前半部分子串, 加上c, 并且加上 R[i]的后半部分子串 就可以构成 s2的串了。

    然后稍微贪省力一下,就差分标记一下就好了。

    最后遍历一下s1的所有位置, 看一下是否合法就好了。

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
     4 #define LL long long
     5 #define ULL unsigned LL
     6 #define fi first
     7 #define se second
     8 #define pb push_back
     9 #define lson l,m,rt<<1
    10 #define rson m+1,r,rt<<1|1
    11 #define max3(a,b,c) max(a,max(b,c))
    12 #define min3(a,b,c) min(a,min(b,c))
    13 typedef pair<int,int> pll;
    14 const int INF = 0x3f3f3f3f;
    15 const LL mod = 1e9+7;
    16 const int N = 2e5+10;
    17 char s1[N];
    18 char s2[N];
    19 int L[N], R[N];
    20 int sum[N][26];
    21 int main(){
    22     ///Fopen;
    23     scanf("%s%s", s1, s2);
    24     int len1 = strlen(s1), len2 = strlen(s2);
    25     int j = -1, id ;
    26     for(int i = 0; i < len2; i++){
    27         j++;
    28         while(j < len1 && s1[j] != s2[i]) j++;
    29         if(j == len1) {puts("No"); return 0;}
    30         id = s2[i] - 'a';
    31         sum[j][id]++;
    32     }
    33     j = len1;
    34     for(int i = len2-1; i >= 0; i--){
    35         j--;
    36         while(j >= 0 && s1[j] != s2[i]) j--;
    37         if(j == -1) {puts("No"); return 0;}
    38         id = s2[i] - 'a';
    39         sum[j+1][id]--;
    40     }
    41     for(int i = 1; i < len1; i++)
    42         for(int j = 0; j < 26; j++)
    43             sum[i][j] += sum[i-1][j];
    44     for(int i = 0; i < len1; i++){
    45         id = s1[i] - 'a';
    46         if(!sum[i][id]){puts("No"); return 0;}
    47     }
    48     puts("Yes");
    49     return 0;
    50 }
    View Code

        

  • 相关阅读:
    Spark 分布式环境---slave节点无法启动(已解决)
    Hadoop 分布式环境slave节点重启忽然不好使了
    Spark 2.2.0 分布式集群环境搭建
    arm-linux-gcc
    VS+QT创建一个OpenCV应用
    QT安装和vs2015使用
    DE1_MSEL
    Hog实例
    resize函数
    Hog特征
  • 原文地址:https://www.cnblogs.com/MingSD/p/8996586.html
Copyright © 2011-2022 走看看