首页 > 其他分享 >AtCoder 329. E - Stamp (搜索 + 思维

AtCoder 329. E - Stamp (搜索 + 思维

时间:2023-11-26 14:55:05浏览次数:33  
标签:AtCoder 删除 Stamp System int static ox sc 329

import java.util.Scanner;

class Main {
    static int n, m;
    static String s, t;
    static StringBuilder ox;

    /**
     * 思路 :
     *      思路的大门 : 题目要要求把x变成s, 我们可以反过来, 把s变成只有#的x, 所以我们就有了思路
     *           1. 从前往后遍历, 如果s的某一段和t相同, 那么我们就删除, 并且删除后变成连续的#了, 我们把#看成和任何字符都相同 (这里豁然开郎
     *                  比如 : AB# == ABC
     *           2. 如果s的一个位置删除了, 那么这个删除后的位置如果能产生下一个删除位置的话, 那么一定在当前删除位置左右的m个长度内 (可以自己动手画画图
     *           3. 我们避免一个位置重复搜索, 特判 ### != ABC
     *
     *           就这样用搜索删就好了, 注意边界以及下标问题
     * */

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        n = sc.nextInt(); m = sc.nextInt();
        s = sc.next(); t = sc.next();
        ox = new StringBuilder(s);

        for (int i = 0; i <= n - m; i ++ ) // 枚举每一个位置看是否可以删除
            if (check(i)) dfs(i);

//        System.out.println("ox -> " + ox);
//        System.out.println("s -> " + s);

        for (int i = 0; i < n; i ++ ) { // 看删除后的s是否全是#
            if (ox.charAt(i) != '#') {
                System.out.println("No");
                return ;
            }
        }

        System.out.println("Yes");
    }

    private static void f(int x) { // 删除操作
        for (int i = x; i <= x + m - 1; i ++ )
            ox.setCharAt(i, '#');
    }

    private static boolean check(int x) { // 检查 (不过多描述, 自己看)
        boolean f = false; // f的作用, 处理特判 ### != ABC 
        for (int i = 0; i < m; i ++ ) {
            if (ox.charAt(x + i) == '#') continue;
            if (ox.charAt(x + i) != t.charAt(i)) return false;
            f = true;
        }

        return f;
    }

    private static void dfs(int x) { // 搜索
        f(x); // 删除

        for (int i = Math.max(0, x - m); i < x; i ++ ) // 前m个位置
            if (check(i)) dfs(i);

        for (int i = x + 1; i <= x + m && i + m - 1 < n; i ++ ) // 后m个位置
            if (check(i)) dfs(i);
    }
}

标签:AtCoder,删除,Stamp,System,int,static,ox,sc,329
From: https://www.cnblogs.com/llihaotian666/p/17857247.html

相关文章

  • TOYOTA SYSTEMS Programming Contest 2023(AtCoder Beginner Contest 330)
    TOYOTASYSTEMSProgrammingContest2023(AtCoderBeginnerContest330)A-CountingPassesintmain(){IOS;cin>>n>>m;intans=0;rep(i,1,n)cin>>k,ans+=k>=m;cout<<ans;return0;}B-......
  • postman内置函数-$timestamp
    引言postman当中有一些内置函数,可以直接使用。介绍$timestamp内置函数用于在请求中插入当前时间戳。它可以用在请求头、请求体、响应头和响应体中。以下是一个使用$timestamp内置函数的示例:POST/api/v1/usersContent-Type:application/json{"name":"JohnDoe",......
  • postman内置函数-$timestamp
    引言postman当中有一些内置函数,可以直接使用。介绍$timestamp内置函数用于在请求中插入当前时间戳。它可以用在请求头、请求体、响应头和响应体中。以下是一个使用$timestamp内置函数的示例:POST/api/v1/usersContent-Type:application/json{"name":"JohnDoe",......
  • AtCoder Beginner Contest 330
    A-CountingPasses(abc330A)题目大意给定\(n\)个学生的分数,以及及格分\(x\),问多少人及格了。解题思路依次判断即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_stdio(false);cin.ti......
  • [岩禾溪] C++20项目 muduo网络库 项目实战 (1)Logger & Timestamp
    ​  ​编辑本项目由岩禾溪原创 项目实战+新特性用法介绍开源代码+博客解析+视频讲解 GitHub+CSDN+BiliBili同步更新,三个平台同名【岩禾溪】视频讲解和代码链接在文章末尾,你的关注是我更新的最大动力项目环境本项目采用C++20开发精简Muduo网络库BuildTool:Xma......
  • [ABC329C] Count xxx 题解
    插曲因为本人看错了题面,买看到一个子串只包含一种字母,所以切完D和E才回来发现很简单。问题翻译给你一个长度为\(N\)的字符串\(S\),由小写英文字母组成。求\(S\)的非空子串中有多少个是一个字符的重复。在这里,作为字符串的两个子串是相等的,即使它们是以不同的方式得到......
  • [ABC329D] Election Quick Report 题解
    题目翻译有一场选举,要从\(N\)名候选人中选出一名获胜者,候选人编号为\(1,2,\ldots,N\),共有\(M\)张选票。每张选票正好投给一位候选人,其中\(i\)票投给了候选人\(A_i\)。选票将按照从第一张到最后一张的顺序进行统计,每张选票统计完毕后,将更新并显示当前的获胜者。得票......
  • AT_abc329_e [ABC329E] Stamp 题解
    题目翻译给你两个字符串:\(S\)由大写英文字母组成,长度为\(N\);\(T\)也由大写英文字母组成,长度为\(M\),小于\(N\)。有一个长度为\(N\)的字符串\(X\),它只由#字符组成。请判断是否有可能通过执行以下任意次数的操作使\(X\)与\(S\)匹配:在\(X\)中选择\(M\)个连续字符,并......
  • AtCoder Beginner Contest 329 F
    AtCoderBeginnerContest329FF-ColoredBall(atcoder.jp)(启发式合并)问题陈述有\(N\)个编号为\(1,2,\ldots,N\)的盒子。最初,盒子\(i\)中有一个颜色为\(C_i\)的小球。给你\(Q\)个查询,你要按顺序处理。每个查询都由一对整数\((a,b)\)给出,并要求您执行以下......
  • 2023-2024-1 20231329《计算机基础与程序设计》第9周学习总结
    作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09这个作业的目标计算机科学概论第10,11章并完成云班课测试《C语言程序设计》第8章并完成云班课测试......