蓝桥杯(C++ 左移右移 买二增一 松散子序列 填充 有奖问答 更小的数 )

目录

左移右移

思路:

代码: 

买二增一 

思路:

代码: 

 松散子序列

思路:

代码:

 填充

思路:

代码 :

 有奖问答

思路:

代码: 

更小的数

思路:

代码:

左移右移

思路:

1、用权重的思路,初始权值为该数值

2、将改变权值初始为cval=n+1,当之后出现某数,

      为L则,权值赋为-cval, cval++;

      为R则,权值赋为cval,cval++。

3、最后根据权值排序

代码: 

#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
	int num;
	int val;
}a[200010];
bool cmp(node a,node b)
{
	return a.val < b.val;
}
int main()
{
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		a[i].num = i;
		a[i].val = i;
	}
	int cval = n + 1;
	while (m--)
	{
		int t;
		char b;
		cin >> b >> t;
		if (b == 'L')
		{
			a[t].val = -cval;
			cval++;
		}
		else
		{
			a[t].val = cval;
			cval++;
		}
	}
	sort(a + 1, a + n + 1, cmp);
	for (int i = 1; i <= n; i++)
		cout << a[i].num << " ";
}

买二增一 

思路:

 1、用一个优先队列q(大根堆)存储价格

 2、再用一个队列cost存储,每买两个可以赠送的最大价格,当cost的队头大于等于q的队头,说明该q队头价格可以赠送,直接出队。

 3、用ans存储总价格

代码: 

#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
int main()
{
	priority_queue<ll> q, cost;
	int n,t;
	cin >> n;
	while (n--)
		cin >> t, q.push(t);
	ll ans = 0;
	while (!q.empty())
	{
		while (!cost.empty() && !q.empty() && cost.top() >= q.top())
			cost.pop(), q.pop();
		int maxp=0, minp=0;
		if (!q.empty())
			maxp = q.top(), q.pop();
		while (!cost.empty() && !q.empty() && cost.top() >= q.top())
			cost.pop(), q.pop();
		if (!q.empty())
			minp = q.top(), q.pop();
		//cout << maxp << " " << minp;
		ans += maxp + minp;
		cost.push(minp / 2);
	}
	cout << ans;
}

 松散子序列

思路:

1、用一个动态规划

代码:

#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
int main()
{
	string s;
	cin >> s;
	int dp[1000005] = { 0 };
	dp[0] = s[0] - 'a' + 1;
	dp[1] = max(dp[0], s[1] - 'a' + 1);
	for (int i = 2; i < s.length(); i++)
	{
		dp[i] = max(dp[i - 1], dp[i - 2] + (s[i] - 'a' + 1));
	}
	cout << dp[s.length() - 1];
}

 填充

思路:

1、用flag记录是否是00或者11子串

2、从第二个开始,用这一个与前一个比较是否相等(偶数比奇数)

代码 :

#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
int main()
{
	string s;
	cin >> s;
	int flag[10000005];
	ll ans = 0;
	for (int i =1; i < s.length(); i++)
	{
		if (flag[i - 1])
			continue;
		if (s[i] == s[i - 1] || s[i - 1] == '?' || s[i] == '?')
		{
			flag[i] = 1;
			ans++;
		}
	}
	cout << ans;
}

 有奖问答

思路:

1、用动态规划

2、分两种情况:

      第一种:第i题没有做对,方案数等于i-1题的所有方案数和

      第二种:第i题做对,得到j分,方案数等于上一题方案数得j-10分的方案数

3、当得分为70时,加上该可能的所有方案数

代码: 

#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
int main()
{
	ll ans = 0;
	int dp[35][100] = { 0 };
	dp[1][0] = dp[1][10] = 1;//第一题可能得10分或者0分
	for(int i=2;i<=30;i++)//从第二题开始到三十题
		for (int j = 0; j <= 90; j += 10)//0到90的方案数
		{
			if (j == 0)//该题没做对,方案数等于i-1题的所有方案数
			{
				for (int k = 0; k <= 90; k += 10)
				{
					dp[i][0] += dp[i - 1][k];
				}
			}
			else//该题做对了,方案数等于上一题做完该题得多少分-10的方案数
			{
				dp[i][j] = dp[i - 1][j - 10];
				if (j == 70) ans += dp[i][j];//等于70,方案数加上
			}
		}
	cout << ans;
}

更小的数

 

思路:

1、用动态规划

代码:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
int main()
{
	string s;
	cin >> s;
  int dp[5010][5010];
	s = " " + s;
	for (int i = 2; i < s.length(); i++)
	{
		for (int j = 1; j + i - 1 < s.length(); j++)
		{
			int l = j, r = j + i - 1;
			if (s[l] == s[r])
				dp[l][r] = dp[l + 1][r - 1];
			else if (s[l] < s[r])
				dp[l][r] = 0;
			else
				dp[l][r] = 1;
		}
	}
	ll ans = 0;
	for (int i = 1; i < s.length(); i++)
		for (int j = i; j < s.length(); j++)
			ans += dp[i][j];
	cout << ans;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/350481.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java强训day4(选择题编程题)

选择题 接口中的方法是为了让重写编程题 题目 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int a_b sc.nextInt();int b_c sc.nextInt();int ab sc.nextInt();int bc sc.nextInt();for(in…

面向社交网络语言隐写分析

论文&#xff1a;Linguistic Steganalysis Toward Social Network 发表在&#xff1a;IEEE Transactions on Information Forensics & Security是网络与信息安全领域的国际两大顶级期刊之一&#xff0c;中国计算机学会&#xff08;CCF&#xff09;推荐的A类期刊&#xff0c…

Git 删除已经 Push 到远程多余的文件

例如要删除 data/log 文件 1. 在当前项目下打开终端 2. 查看有哪些文件夹 dir 3. 预览将要删除的文件&#xff08;如果不清楚该目录下是否存在不应该删除的文件&#xff09; git rm -r -n --cached 文件/文件夹名称 加上 -n 这个参数&#xff0c;执行命令时&#xff0c;是不会…

ubuntu设置右键打开terminator、code

前言&#xff1a; 这里介绍一种直接右键打开本地目录下的terminator和vscode的方法。 一&#xff1a;右键打开terminator 1.安装terminator sudo apt install terminator 2.安装nautilus-actions filemanager-actions sudo apt-get install nautilus-actions filemanager…

Open CASCADE学习|圆柱螺旋线绘制原理探究

1、圆柱螺旋线绘制原理 在OCC中&#xff0c;圆柱面的参数方程为&#xff1a; 设P为&#xff08;x0,y0,z0&#xff09;,则 xx0r*cos(u) yy0r*sin(u) zz0v 但u、v之间有关系时&#xff0c;此方程表达为圆柱螺旋线&#xff0c;u、v之间为线性关系时是等螺距螺旋线&#xff0…

数位dp,HDU 4151 The Special Number

一、题目 1、题目描述 In this problem, we assume the positive integer with the following properties are called ‘the special number’: 1) The special number is a non-negative integer without any leading zero. 2) The numbers in every digit of the special nu…

Linux基础指令大汇总

Linux的指令比较多&#xff0c;在学习的过程中要学会总结和归纳&#xff0c;同时结合实践多多使用&#xff0c;就像学数学一样&#xff0c;不是背过公式就等于掌握的&#xff0c;而是要知道在什么时候用&#xff0c;怎么用才是关键。 这篇文章会列举一系列常用的指令&#xff0…

springblade框架实现多数据源

文章目录 前言1、 application-dev.yml配置文件2、service层3、修改 spring.datasource.dynamic.enabled 备注总结 前言 公司要求使用springblade框架开发&#xff0c;需要用到多数据源的场景 1、 application-dev.yml配置文件 #数据源配置 spring:datasource:dynamic:primar…

腾讯云服务器一键部署幻兽帕鲁联机服务器详细教程(Linux系统)

腾讯云作为国内领先的云计算服务商&#xff0c;为广大用户提供了稳定、高效的云计算服务。本文将详细介绍如何在腾讯云服务器&#xff08;Linux系统&#xff09;实现一键部署幻兽帕鲁联机服务器&#xff0c;帮助大家快速搭建自己的游戏联机服务器。 第一步&#xff1a;购买服务…

初识数据库

数据库技术的基础术语 在学习数据库技术之前&#xff0c;我们先认识与该技术密切相关的基本术语&#xff0c;分别是数据库 (Database, DB)、数据库管理系统(Database Management System, DBMS)和数据库 系统(Database System, DBS)&#xff0c;具体介绍如下。 1. 数据库 数…

【Linux install】详细的Ubuntu和win双系统安装指南

文章目录 1.前期准备1.1 制作启动盘1.2关闭快速启动、安全启动、bitlocker1.2.1 原因1.2.2 进入BIOSshell命令行进入BIOSwindows设置中高级启动在开机时狂按某个键进入BIOS 1.2.3 关闭Fast boot和Secure boot 1.3 划分磁盘空间1.3.1 查看目前的虚拟内存大小 2.开始安装2.1 使用…

代码随想录 Leetcode102. 二叉树的层序遍历

题目&#xff1a; 代码(首刷看解析 2024年1月24日&#xff09;&#xff1a; class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res;if(root nullptr) return res;queue<TreeNode*> que;TreeNode…

智能充电桩,机器人 wifi蓝牙 解决方案

新联鑫威低功耗高性价比sdio wifi/蓝牙combo的模块单频2.4g的CYWL6208&#xff0c;双频2.4g/5g CYWL6312可以应用到一些低延时 高性能 低功耗 联网需求的交流直流充电桩&#xff0c;扭力扳手&#xff0c;agv机器人&#xff0c;目前支持主流的stm32F4/GD32F4 瑞萨 psoc的主控&am…

博弈论(牛客练习赛)

思路&#xff1a;我们考虑小念赢 1、如果n>1并且p0&#xff0c;小念可以连续取两次&#xff0c;相当于小念有挂&#xff0c;可以从必败态转为必胜态&#xff0c;必赢。 2、如果n>1并且m>n-1&#xff0c;小念第一次取n-1个&#xff0c;小念必赢。 代码&#xff1a; …

(大众金融)SQL server面试题(2)-游戏打包销售折扣

今天&#xff0c;面试了一家公司&#xff0c;什么也不说先来三道面试题做做&#xff0c;第二题。 那么&#xff0c;我们就开始做题吧&#xff0c;谁叫我们是打工人呢。 题目是这样的&#xff1a; 销售平台进行游戏打包促销。将任意个游戏打包为一组&#xff0c;根据游戏数量…

RabbitMQ之死信交换机

前言 消息队列是分布式系统中常用的组件&#xff0c;用于异步通信、解耦和提高系统可靠性。然而&#xff0c;在实际应用中&#xff0c;难免会遇到一些异常情况&#xff0c;例如消息处理失败、超时等。为了更好地处理这些异常情况&#xff0c;死信交换机&#xff08;Dead Lette…

C++:组合、继承与多态

面向对象设计的重要目的之一就是代码重用&#xff0c;这也是C的重要特性之一。代码重用鼓励人们使用已有的&#xff0c;得到认可并经过测试的高质量代码。多态允许以常规方式书写代码来访问多种现有的且已专门化了的相关类。继承和多态是面向对象程序设计方法的两个最主要的特性…

使用vs2022将c语言文件打包成exe可执行程序分享给朋友(详解)

目录 1.给vs2022安装打包插件 2.新建打包项目 找到自己想要打包好的项目 3.拷贝必要的资源 3.1拷贝素材 3.2***导入输出文件***** 4.设置项目在桌面显示的图标 4.1找好图标素材&#xff0c;利用在线工具生成图标格式 4.2将图标放到桌面显示中来 5.最终生成打包 1.给vs…

鸿蒙ArkUI开发-实现增删Tab页签

场景介绍 部分应用在使用过程中需要自定义添加或删除标签的场景&#xff0c;比如在浏览器中的顶部标签栏中需要新打开或关闭网页页签&#xff0c;而这种场景与Tabs组件效果类似&#xff0c;但Tabs组件不提供增加或删除页签的功能&#xff0c;不能自由的增加删除页签&#xff0…

C语言实现希尔排序算法(附带源代码)

希尔排序 希尔排序&#xff0c;也称递减增量排序算法&#xff0c;是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的&#xff1a; 插入排序在对几乎已经排好序的数据操作时&#xff0c;效率高&#xff0…
最新文章