首页 > 其他分享 >【题解】洛谷P11186: 三目运算

【题解】洛谷P11186: 三目运算

时间:2024-11-14 14:58:27浏览次数:1  
标签:cnt 洛谷 int 题解 while flag 三目

不好玩!!!

image

这是个树形结构,直接暴力模拟,但过不去,但是需要发现答案是个区间,我们对字符串处理时记录最大值最小值,然后到叶子节点时我们将此时的区间存起来,查询时直接二分查询这个数对于的区间就可以了。

总结:不好玩!!!

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=2e5+10;

int m,q;
string s;


struct ss{
	int x;
	int nxt[3];
	int flag;
	//nxt下一个数的位置
	//flag 1:> 2:< 3:结束 
}a[N];

int x=1;

struct sss{
	int l,r,val;
};

vector<sss> v;
int cnt=1;
void dfs(int cnt,int mi,int mx){
	
	if(s[x]=='x'){
		x++;
		if(s[x]=='>')
			a[cnt].flag=1;
		else
			a[cnt].flag=2;
		x++;
		
		int sum=0;
		while(s[x]>='0'&&s[x]<='9'){
			sum*=10;
			sum+=s[x]-'0';
			x++;
		}
		a[cnt].x=sum;
		x++;
			
		if(a[cnt].flag==1){
			dfs(cnt+1,sum+1,mx);
		}
		else{
			dfs(cnt+1,mi,sum-1);
		}
		if(a[cnt].flag==1){
			dfs(cnt+2,mi,sum);
		}
		else{
			dfs(cnt+2,sum,mx);
		}
	}
	else{
		int sum=0;
		while(s[x]>='0'&&s[x]<='9'){
			sum*=10;
			sum+=s[x]-'0';
			x++;
		}
		x++;
		if(mi<=mx){
			v.push_back({mi,mx,sum});
		}
	}
}

bool cmp(sss g,sss h){
	return g.l<h.l;
}

signed main(){
    ios::sync_with_stdio(false);
	cin.tie(nullptr); 
//	freopen("expr4.in","r",stdin);
//	freopen("std.out","w",stdout);
	
	cin>>m>>q;
	
	cin>>s;
	
	s='%'+s;
	
	dfs(1,1,10000000);
	
	sort(v.begin(),v.end(),cmp);
	
	while(q--){
		int x;
		cin>>x;	
		int l=0,r=v.size()-1,mid;
		while(l<r){
			mid=(l+r+1)>>1;
			if(v[mid].l<=x){
				l=mid;
			}
			else{
				r=mid-1;
			}
		}
		cout<<v[l].val<<"\n";
	}
    return 0;
}

标签:cnt,洛谷,int,题解,while,flag,三目
From: https://www.cnblogs.com/sadlin/p/18545982

相关文章

  • 洛谷P11183 [ROIR 2018 Day2] 大数据处理
    涉及知识点:动态开点线段树,贪心前言很妙很感性直观的贪心,做完神清气爽。题意Link有一个长为\(2^k\)的序列,编号从\(0\)开始,你要在上面染色,每次只能染色\([k2^i,(k+1)2^i-1]\)的区间(\(0\leqi<k\)),问最少要染色多少次才能变成给定的目标序列。目标序列以形如\((x_1,y_1),(......
  • 【题解】洛谷P1712: [NOI2016] 区间
    P1712[NOI2016]区间我对尺取法并不敏感,所以感觉有点难度,我们想到按照区间长度排序加入使得满足单调性,直到有一个区间的覆盖次数达到了m就可以计算了,而这个就是尺取法,单调性使得我们答案总是最优的。覆盖次数就可以用线段树做,而且数据范围很大需要离散化,计算答案时注意把答案带......
  • 题解:P11251 [GESP202409 八级] 美丽路径
    题目传送门题目大意给你一颗树,每个结点为黑色或白色。求一条路径,使得路径上距离为奇数的点颜色不同,距离为偶数的点颜色相同,输出这条路径最多能包含多少结点。思路讲解容易想到用树形动态规划搭配dfs解决。将结点1......
  • 2021年6月上海月赛T5题解(做基础123题时遇到的)
    平衡点内存限制: 256 Mb时间限制: 1000 ms题目描述给定一个由 n 个整数组成的数列a1​,a2​,⋯,an​,请为这个数列找到一个平衡点,使得平衡点左侧与右侧的力矩尽量接近。若平衡点为 ak​,则左侧力矩定义为数列中下标小于 k 的各个元素到 ak​ 的距离乘以这些元素......
  • 「AT_diverta2019_2_e」Balanced Piles 题解
    题意描述有一个长度为\(N(2\leN\le10^6)\)的数组,一开始所有元素均为\(0\)。设\(M\)为当前数组中的最大元素,\(m\)是当前数组中的最小元素,你可以执行若干次以下操作:选择一个大小为\(m\)的元素,把他变为\(x\),其中\(M\lex\leM+D\)且\(m<x\)。求有多少种操作方法......
  • 洛谷P1182 数列分段 Section II
    洛谷P1182数列分段SectionIIP1182数列分段SectionII数列分段SectionII题目描述对于给定的一个长度为的正整数数列,现要将其分成()段,并要求每段连续,且每段和的最大值最小。关于最大值最小:例如一数列要分成段。将其如下分段:第一段和为,第段和为,第段和为,和......
  • [ARC105C] Camels and Bridge 题解
    [ARC105C]CamelsandBridge题解https://www.luogu.com.cn/problem/AT_arc105_c记:这是24年夏天在北京梦熊写的(模拟赛撞原),希望这年夏天fowever。sol首先\(n\)很小,所以可以去暴力枚举顺序,也就是全排列。\(W_s\)表示排列为\(s\)时的间距。又令\(f_i\)为前\(i\)只......
  • [题解]P3119 [USACO15JAN] Grass Cownoisseur G
    P3119[USACO15JAN]GrassCownoisseurG显然我们可以先跑强连通分量,由\(x\)个点缩成的新点\(u\)权值为\(v[u]=x\)。下文中的节点\(1\)均表示缩点后节点\(1\)所在的节点。我们在缩点后的DAG上跑拓扑排序,预处理出\(fa[i]\)和\(fb[i]\),分别表示“\(1\)到\(i\)路径的点权和”,“\(i......
  • 洛谷P11228的C++题解
    题目分析题目题目让我们算出机器人走步后经过了多少个不重复的点这道题不是搜索!直接按照题意模拟就行了。遇到墙就向右转,不是就直行。特别注意:向右转也是一步!一个格子最多算一遍!我们可以用一个标记数组 st,走过的点就打上标记。判断走道的点有没有打上标记,有就不......
  • P2779 [AHOI2016初中组] 黑白序列题解
    题意:小可可准备了一个未完成的黑白序列,用B和W表示黑色和白色,用?表示尚未确定。他希望知道一共有多少种不同的方法,在决定了每一个?位置的颜色后可以得到一个小雪喜欢的黑白序列。其中,小雪喜欢的黑白序列指的是对于任何正整数\(n\),由连续\(n\)个黑接上连续\(n\)个白......