回校考试2

这次考试安排在早上,到教室就开始考试了;

今天的题没有昨天的水;

第一题:

题目描述:

很多人的编号为1到n,位置是xi和yi,从1好开始,每个人把离他最近的人淘汰,然后编号2的人如果没被淘汰就淘汰离自己最近的人知道剩下最后1个人;


题目解析:这题只要按照要求强模拟就好了;



第二题:

题目描述:

有两种椅子,用S和L表示,S表示单人椅;

L表示双人椅;

S的两边都可以放杯子;

L只有最两边能放杯子;

*表示杯子,如:

* S * L  L *L  L * S * S *L L *

问有多少人能单独放杯子

???


这题只要把能放杯子的地方全求出来,和人数比较;

比人数大就输出人数;

不然就输出地方数。

具体代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,x=0,ren=0,zw=0;
	char a[200];
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		x++;
		a[x]=' ';
		x++;
		cin>>a[x];
	}
	x++; a[x]=' ';
	for(int i=1;i<=x;i++)
	{
		if(a[i]=='S')
		{
			a[i-1]='*'; a[i+1]='*';
		}
		if(a[i]=='L') 
		 if(a[i+2]=='L')
		 if(a[i+1]==' ')
		 {
		 	a[i-1]='*'; a[i+3]='*';
		 }
	}
	for(int i=1;i<=x;i++)
	{
		if(a[i]=='S'||a[i]=='L') ren++;
		if(a[i]=='*') zw++;
	}
	if(zw>=ren) cout<<ren<<endl;
	else cout<<zw<<endl;
	return 0;
}



第三题:


题目描述:

给你一串数字,0代表品(,1代表 );

()的值是1;

 字符串A的值是是(A) ,(A)的值是2*是(A);

字符串A和B的s(A)和s(B)的值是他们的和;

这题要

但是明显需要用括号匹配来计算每个括号所属的层数。

然后用dfs来求出每个括号嵌套的值。



第四题:

x去旅行,

开一辆车,最多装g升油,

每跑一公里要消耗一升油;

原有b升油,途中有n个加油站;

给了位置和每升油的价格,问你要到离自己d公里的目的地最少要花多少钱到,如果到不了,输出-

这道题模拟性质也比较重,可以各种搞法,并且可以拿到不少的分数。

不过,数据项的存储要整理好,这个是我们必须要具备的一个基本技能。

 

但是如何高效的去组织油箱里的油?    并且还要保证足够。

   

    可以利用那个神奇的数据结构: 单调队列来维护油箱。

       我们人为的将油箱的油按价格进行排序,这样就能更好的计算价格。

       我们再认为,只有燃烧掉的油才是买过的油,加进油箱的油可以退掉,这样我们就能保证在有解的情况下,肯定可以走到最后。

       那么,我们就用一个单调队列记录这个油箱的油,每个队列元素记录这个价格的油的价格和现在保有量。最初的油的价格为0.

       这样,到一个新的加油点后,先把用的油减掉(队头出队),再加新的油(队尾进队,单调队列进队的时候,当前油的价格如果比队尾的价格便宜,那么队尾保存的油就要被淘汰)。

       到此为止,我们用了O(n)的时间复杂度解决了这个问题。

 



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值