洛谷P3514 [POI 2011] LIZ-Lollipop(思维题)

题目

思路来源

乱搞ac

题解

注意到一个区间两个端点都是2的话,此时和是sum,并且只能删掉一个2,那么sum-1一定拼不出来

那么如果一个区间两个端点有一个端点是1的话,此时和是sum,那么[1,sum]都能拼出来

不妨左端点是1,右端点是2,首先sum可以拼出来,删左端点就能拼出sum-1,删右端点就能拼出sum-2,然后删掉右端点,递归的考虑[1,sum-2]

不妨左端点是1,右端点是1,首先sum可以拼出来,删右端点就能拼出sum-1,然后删掉右端点,递归的考虑[1,sum-1]

数学归纳可知,[1,sum]都能拼出来

代码

cpp 复制代码
#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
#include<set>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<ll,ll> P;
typedef array<ll,3> A;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
const int N=1e6+10,M=2e6+10;
int n,m,sum,v;
char s[N];
P ok[M];
int main(){
    sci(n),sci(m);
    scanf("%s",s+1);
    int l=1,r=n,fir=0,sec=0;
    rep(j,1,n){//TT
        if(s[j]=='T')sum+=2;
        else sum++;
        if(!fir && s[j]=='W')fir=j;
        if(s[j]=='W')sec=j;
    }
    ok[sum]=P(l,r);
    while(l<=r){
        if(s[l]==s[r]){
            if(s[l]=='T'){
                sum-=2;
                if(!sec)l++;
                else if(fir<n-sec+1)l++;
                else r--;
            }
            else{
                sum--,l++;
            }
        }
        else{
            if(s[l]=='T'){
                ok[sum-1]=P(l,r-1);
                sum-=2;
                l++;
            }
            else{
                ok[sum-1]=P(l+1,r);
                sum-=2;
                r--;
            }
        }
        ok[sum]=P(l,r);
    }
    while(m--){
        sci(v);
        if(ok[v]==P(0,0))puts("NIE");
        else printf("%d %d\n",ok[v].fi,ok[v].se);
    }
    return 0;
}
相关推荐
做人求其滴4 小时前
面试经典 150 题 380 274
c++·算法·面试·职场和发展·力扣
daad7774 小时前
记一组无人机IMU传感器数据
算法
计算机安禾4 小时前
【c++面向对象编程】第42篇:模板特化与偏特化:为特定类型定制实现
开发语言·c++·算法
小O的算法实验室4 小时前
2026年KBS,流形感知强化学习差分进化算法+不规则3D无人机路径规划,深度解析+性能实测
算法·智能算法·智能算法改进
玖釉-4 小时前
C++ 中的循环语句详解:while、do...while、for、嵌套循环与循环控制
开发语言·c++·算法
不做无法实现的梦~5 小时前
运动控制系统复习一览-----常考题目总结版本
算法
小短腿的代码世界5 小时前
信号路由风暴:Qt算法交易系统的高频信号分发架构
qt·算法·架构
阿文的代码库5 小时前
一文读懂GROUP BY 1,2 VS GROUP BY column_1, column_2 的区别
算法
008爬虫实战录5 小时前
【码上爬】 题十:魔改算法 堆栈分析,找加密值过程详解
前端·python·算法
chao1898446 小时前
基于狮蚁群算法(ALO)的火电机组功能调度实现
人工智能·算法