zoukankan      html  css  js  c++  java
  • Non-Substring Subsequence

    Non-Substring Subsequence

    原题链接:传送门


    人一我十, 人十我百,追逐青春的梦想,怀着自信的心,永不言弃!


    题目大意

    给定我们一个长度为 (n)的二进制字符串,和 (q) 次查询,每次查询将给出我们一个区间([l , r]) , 我们需要检查在 s 中是否存在一个子序列 和 子段 (s[l , r]),如果存在则输出YES , 否则输出 NO

    分析

    这题我吐了,其实解法很简单,仅仅只是让我们判断一个子序列是否存在,那么我们只需要在(s[0,l-1]) 区间内查看是否存在一个字符和 (s[l]),相等,如果左边不存在那么再检查右边检查从 (s[r + 1 , n]) 中是否存在一个字符和 (s[r]) 相等即可,如果两个条件都不满足则一定不可以构造出来,如果满足任意一个则可以输出YES.可以证明此方法为条件成立的充分必要条件,但过于简单在此忽略证明过程

    我当时脑子抽风了,愣是把那么要求子序列不连续,且子序列的总长度 (>= 2),翻译成了要求子序列不连续的长度为不能超过 2,愣是给这题增加了数倍的难度。结果最后发现自己是个hp。

    来自学妹的嘲讽QAQ:

    本来应该是一场上分场,又由于自己的翻译失误,导致打崩了,希望下次自己再细心一点,再认真一点,下一场加油!

    AC 代码

    AC code

    #include <bits/stdc++.h>
    
    #define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    #define lowbit(x) (x & -x)
    #define FOR(i,a,b)  for(int i=(a); i< (b); ++i)
    #define RFOR(i,b,a) for(int i=(b);i>=(a);i--)
    #define REP(i,a,b)  for(int i=(a); i<=(b); ++i)
    
    #define PI 3.14159265358979323846264338327950L
    #define PB push_back
    #include <bits/stdc++.h>
    
    #define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    #define lowbit(x) (x & -x)
    #define FOR(i,a,b)  for(int i=(a); i< (b); ++i)
    #define RFOR(i,b,a) for(int i=(b);i>=(a);i--)
    #define REP(i,a,b)  for(int i=(a); i<=(b); ++i)
    
    #define PI 3.14159265358979323846264338327950L
    #define PB push_back
    
    using namespace std;
    typedef long long ll;
    template<typename T>
    void PrArr(const T a[] , int len){
    	for(int i = 0; i <= len; i++)cout << a[i] << " ";
    	cout << endl;
    }
    template<typename T>
    void PrVec(const vector<T> a){
    	for(auto it : a)cout << it << " ";
    	cout << endl;
    }
    template<class T>inline void read(T &res)
    {
    	char c;T flag=1;
    	while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;res=c-'0';
    	while((c=getchar())>='0'&&c<='9')res=res*10+c-'0';res*=flag;
    }
    
    const int MAX = 0x7ffffff;
    const int MIN = 0xcf;
    int test;
    int n , q;string s;
    void func(int l, int r)
    {
    	bool bad = false;
    	for(int i = 0; i < l; i ++)
    		if(s[i] == s[l])bad = true;
    	for(int j = r + 1; j < s.size(); j ++)
    		if(s[j] == s[r])bad = true;
    	cout << (bad ? "YES" : "NO") << endl;
    }
    void slove()
    {
    	cin >> n >> q >> s;
    	for(int i = 0; i < q; i ++)
    	{
    		int l, r;
    		cin >> l >> r;
    		l--, r--;
    		func(l , r);
    	}
    }
    int main()
    {
    #ifdef LOCAL
    	auto start_time = clock();
    	cerr << setprecision(3) << fixed; // 在iomanip中
    #endif
    	SIS;cin >> test;
    	while(test--)slove();
    #ifdef LOCAL
    	auto end_time = clock();
    	cerr << "Execution time: " << (end_time - start_time) * (int)1e3 / CLOCKS_PER_SEC << " ms
    ";
    #endif
    }
    
    
  • 相关阅读:
    【python】10分钟教你用python打造贪吃蛇超详细教程
    盘点下那些年我们用过的编程工具IDE都有哪些
    帝国竞争算法(imperialist competitive algorithm, ICA )详解+Java代码实现
    10分钟教你使用Picgo+GitHub+ jsDelivr搭建CDN加速免费图床
    10分钟了解代码命名规范(Java、Python)
    什么是算法?从枚举到贪心再到启发式(下)-终于有人把邻域搜索讲清了!
    番茄路径优化系统介绍-专注于算法与路径优化VRP
    什么是算法?从枚举到贪心再到启发式(上)
    10分钟教你用Python打造学生成绩管理系统
    10分钟教你用Python中的Matplotlib绘制多图并合并展示
  • 原文地址:https://www.cnblogs.com/wlw-x/p/14018256.html
Copyright © 2011-2022 走看看