首页 > 其他分享 >Day6 备战CCF-CSP练习

Day6 备战CCF-CSP练习

时间:2024-10-13 15:00:19浏览次数:6  
标签:lower Day6 auto 样例 int 大小写 字符串 CCF CSP

Day 6

题目描述

给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。

你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。

输入格式

输入的第一行包含一个字符串 \(S\),由大小写英文字母组成。

第二行包含一个数字,表示大小写敏感的选项,当数字为 \(0\) 时表示大小写不敏感,当数字为 \(1\)时表示大小写敏感。

第三行包含一个整数 \(n\),表示给出的文字的行数。

接下来 \(n\) 行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。

输出格式

输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串 \(S\) 的行。

数据范围

\(1≤n≤100\),每个字符串的长度不超过 \(100\)。

输入样例:

Hello
1
5
HelloWorld
HiHiHelloHiHi
GrepIsAGreatTool
HELLO
HELLOisNOTHello

输出样例:

HelloWorld
HiHiHelloHiHi
HELLOisNOTHello

样例解释

在上面的样例中,第四个字符串虽然也是 Hello,但是大小写不正确。

如果将输入的第二行改为 \(0\),则第四个字符串应该输出。

题目分析

字符串匹配,由于数据很小,双指针暴力也可以拿满分,若数据量很大,用\(KMP\)优化即可
至于大小写,spj一下就行了

C++ 代码

暴力

#include<bits/stdc++.h>

using namespace std;

string s;
int lower;
int n;

int main()
{
    cin >> s >> lower >> n;
    
    if(!lower)
        for(auto &it : s)
            it = tolower(it);
    
    string p;
    vector<string> res;
    while (n -- )
    {
        cin >> p;
        auto r = p;
        if(!lower) 
            for(auto &it : p)
                it = tolower(it);
                
        for(int j = 0 ; j < p.size() ; j ++){
            int i = 0 , k = j;
            for(; i < s.size() && k < p.size() ; i ++ , k ++)
                if(s[i] != p[k]) break;
            if(i == s.size()){
                res.push_back(r);
                break;
            }
               
        }
    }
    
    for(auto str : res)
        cout << str << '\n';
    
}

\(KMP\)

#include <bits/stdc++.h>

using namespace std;
const int N = 110;

int lower , T;
char s[N] , p[N] , r[N];
int ne[N];

int main()
{
    cin >> s + 1  >> lower>> T;
    int n = strlen(s + 1);
    
    if(!lower)
        for(int i = 1 ; i <= n ; i ++)
            s[i] = tolower(s[i]);
    
    for(int i = 2 , j = 0 ; i <= n ; i ++)
    {
        while(j && s[i] != s[j + 1]) j = ne[j];
        if(s[i] == s[j + 1]) j ++;
        ne[i] = j;
    }
    
    while (T -- )
    {
        cin >> p + 1;
        int m = strlen(p + 1);
        
        memcpy(r , p , sizeof p);
        
        if(!lower)
            for(int i = 1 ; i <= m ; i ++)
                p[i] = tolower(p[i]);
        
        for(int i = 1 , j = 0 ; i <= m ; i ++)
        {
            while(j && p[i] != s[j + 1]) j = ne[j];
            if(p[i] == s[j + 1]) j ++;
            if(j == n)
            {
                for(int k = 1 ; k <= m ; k ++)
                    cout << r[k];
                cout << endl;
                break;
            }
        }
    }
}

标签:lower,Day6,auto,样例,int,大小写,字符串,CCF,CSP
From: https://www.cnblogs.com/mathblog/p/18462304

相关文章

  • 10.12牛客CSP-S考试总结
    10.12牛客CSP-S考试总结T1大部分时间在想这题,考场上想到了如何判断不合法的情况,并对剩余情况进行分段,然后根据改变的位置在段中的位置来判断是否可以以当前这个为第一个删的。T2最后时间打了一个暴力,但是写的不够优秀,正解应该是对于二进制数按位考虑异或来进行维护。然后就对......
  • 洛谷P8818 [CSP-S 2022] 策略游戏
    Problem给出两个数组A,B,进行q次询问,每次分别给出这两个数组的某个区间l1,r1,l2,r2,也就是\(A_{l1\simr1}\)与\(B_{l2\simr2}\),有两位同学小L和小Q分别从A,B的以上区间中选一个数,而两数乘积为此次操作的分数,小L希望分数大,小Q希望分数小,请问他们每次以最优策略进行游戏,分数将会......
  • CSP-S 2024 前总结与反思
    做题过于依赖题解与讨论区,缺少行之有效的方法。积累较少,trick大多都不会。现状是思维题对于偏思维难度的想不出正解,偏分讨难度的不会实现;码力题是确实还少点劲头,规划、逻辑较为混乱,没有使用草稿纸的习惯。想把去年的大模拟补了。模拟赛忽高忽低。原因在于策略以及码力问题......
  • CSP 模拟 45
    A好数(number)开桶记录。BSOS字符串(sos)\(f_{i,j,k,n}\)表示到\(i\),结尾两个字母是\(j,k\),已经有了\(0/1/2\)个SOS,字母有\(4\)类,分别为O,没用过的S,无用字母X,用过的S,的方案数,转移暴力。C集训营的气球(balloon)首先有暴力背包,然后每次修改看成删除一个,添加一个,就成退......
  • CSP 模拟 46
    A二分答案,每个数去找范围内最左边的。B相同的数不会交换,所以设\(f_{i,j,k,u}\)为到\(i\),有了\(j\)个0,\(k\)个1,当前位置是\(u\)的最小代价,转移是暴力的,如果一个数要去前面,那么最优的方案一定不会把他往后面换,所以两次移动只有一次贡献,最终的答案要除以\(2\)。C首先......
  • 《csp-j2024初赛真题》 解析
    温馨提醒,以下解析为个人观点,还是得请大佬多多指教(可以喷,但不能说我是复制粘贴!)这篇文章的背景故事:我的那些朋友去给另一个朋友过生日聚会,现在刚刚走回来。那你们知道我为啥不去吗给你们看张珍贵无比的图片: 当然,不止这两张。至于原因,我要回来赶(肝)(干)解析(哭脸)1.32位int......
  • 信息学奥赛复赛复习16-CSP-J2022-01乘方-循环特判、pow函数、快速幂
    PDF文档公众号回复关键字:20241012此前解析题,P8813[CSP-J2022]乘方,给出了循环的解题思路,当时在洛谷提交是通过的,后台收到留言,a=1,b=1e9会炸吧?,确实啊整除要求1s内循环次数最大可以到10^7,现在测试数据明显大很多,按测试数据有这个可能,没想到CSP普及组第1题竟然翻车,去CCF官网......
  • [DMY]2024 CSP-S 模拟赛 Day 14
    没挂分,没写不完,没超常发挥,平常的有点不平常的一场。AKIG赛时33min26s才过T1,足见比赛难度。赛前听说运动会开幕式很好看,于是我就荣升为本校现读所有学生中为数不多的几个没看过运动会开幕式的人类。比赛开始前20min发现没有比赛,问了以后发现我们被ban了。所以协商好之......
  • Day5 备战CCF-CSP练习
    题目描述给定\(n\)个不同的整数,问这些数中有多少对整数,它们的值正好相差\(1\)。输出格式输入的第一行包含一个整数\(n\),表示给定整数的个数。第二行包含所给定的$n$个整数。输出格式输出一个整数,表示值正好相差\(1\)的数对的个数。数据范围\(1≤n≤1000\),给定的......
  • CSP2024-25
    2A题意(gym105158C):给定正整数序列\(\{a\}\),构造一个\(\mathbbZ\to\mathbbZ\)的映射\(f\),满足\(\foralli<n,\f(a_{i})\lef(a_{i+1})\)。最小化\(f(x)\nex\)的\(x\)数量。数据范围:\(1\len\le10^6,\1\lea_i\len\)。对于\(i\notin\{......