备战 清华大学 上机编程考试-冲刺前50%,倒数第4天

T1:四操作

有一个n个元素的数列,元素的值只能是0 1 2三个数中的一个,定义四种操作,(1 i x)表示为把第i位替换成x,x也只能是0 1 2三个数中的一个,(2 i j)表示把第i个数到第j个数所有的元素值加1,并对3取模,(3 i j)表示把第i个数到第j个数之间的序列的颠倒顺序,(4 i j)表示查询第i个数到第j个数之间的序列是否存在三个或以上相同数,如果有,输出yes,否则输出no

输入:第一行输入n,接下来一行输入n个数,保证是0 1 2中的一个,第三行输入一个数q,表示操作个数,接下来q行输入q种操作 输出:每次第四次操作时,输出yes或者no 数据范围:不记得了

解:

模拟题:选择好数据结构——进行模拟操作:

//四种操作:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<vector>
#include<string>
//n个元素的数列, 每个元素是 0/1/2
//总共如下4种操作:
//(1) "1 i x"——把第i个改成x
//(2) "2 i j"——把vec[i]-vec[j]统统+1 %3
//(3) "3 i j"——把vec[i]-vec[j]之间逆序
//(4) "4 i j"——查询vec[i]-vec[j]之间是否存在相同的3个以上数
//第4种中,如果 j-i+1 >=9,直接输出yes
using namespace std;void swap(int & a,int &b)
{int tmp = a;a = b;b = tmp;
}int main()
{//方法一:直接模拟 - 模拟法最重要的是,如何选择存储数据的结构//暴力:直接用vectorint n ;cin>>n;vector<int> vec(n+1,0);  //干脆假设i,j下标都是从1开始for(int i = 1;i<=n;i++){cin>>vec[i];}int q;cin>>q;while(q--){int num1,num2,num3;cin>>num1>>num2>>num3;if(num1 == 1){vec[num2] = num3;}else if(num1 == 2){   for(int i = num2; i<=num3 ;i++){vec[i] = (vec[i]+1)%3;}}else if(num1 == 3){int i = num2;int j = num3;while(j > i){swap(vec[i],vec[j]);i++;j--;}}else if (num1 == 4){if(num3 - num2 + 1 >= 9){cout<<"yes"<<endl;}else{int flag = 0;int a[3] = {0};for(int i = num2;i<=num3;i++){a[vec[i]]++;if(a[vec[i]] >=3){cout<<"yes"<<endl;flag = 1;break;}}if(flag == 0){cout<<"no"<<endl;}}}}return 0;
}
T2:清华售货机

清华大学的自动售货机一共有 𝑛 种饮料出售,每种饮料有自己的售价,并在售货机上各有一个出售口。购买第 𝑖 种饮料时,可以在第 𝑖 个出售口支付 𝑎𝑖 的价格,售货机便会在下方的出货处放出对应的饮料。

又到了清凉的夏日,自动售货机为每种饮料各进货了1 瓶存储在其中,供同学购买。但是,自动售货机却出现了一些故障,它有可能会出货不属于这个出售口的饮料。

对于第 𝑖 个出售口,支付 𝑎𝑖 的价格购买后,如果饮料 𝑖 与饮料 𝑏𝑖 都有存货,有 𝑝𝑖 的概率出货饮料 𝑖 ,有 1−𝑝𝑖 的概率出货饮料 𝑏𝑖 。如果其中一个有存货,另一个已经没有存货,则将出货有存货的那一种饮料。如果两种饮料都没有存货,售货机将不会出货任何饮料并发出警报。**即便最后你没有获得任何饮料,也需要支付 𝑎𝑖 的价格 ** 。

长颈鹿下楼来到这台售货机前,希望能买到最近火爆全网的饮料 𝑥 ,此时售货机中 𝑛 种饮料都存货有 1 瓶。由于他知道售货机有问题,因此决定采取这样的策略来购买:

  • 在 𝑛 个出售口中等概率选择一个出售口 𝑠 开始购买,支付这个出售口的价格 𝑎𝑠 并得到出货。
  • 当得到想要的饮料 𝑥 时,停止购买流程,满意欢喜的离去。
  • 当得到不想要的饮料 𝑦 时,继续在第 𝑦 个支付口购买,支付 𝑎𝑦 的价格并等待出货。
  • 当售货机发出警报时,停止购买流程,灰心丧气的离去。

现在他希望你告诉他,他这一次购买过程期望支付的价钱数量是多少?

解:

思路很简单,利用vec容器,然后按照题目的 思路,找到2个递归出口,写出递归函数即可!

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<vector>
#include<string>//售货机 -- 大概率是 模拟题
//一共n种饮料,第i个出售口售价ai
//每种饮料 只有 1 瓶
//故障!
//支付ai后,如果饮料i和饮料bi都有存货:pi概率获得饮料i,1-pi获得另一种
//一种就直接出,否则什么都没有//策略:
//等概率的选择一个出售口s,并以as支付
//直到获取y
//或者没有出货
//根据输入数据,计算输出一个期望的 价格?using namespace std;int x= 0;
int n;struct drink
{double a;   //价格int  b;     //另一个饮料的编号 - 下标从1开始用double p;   //抽中i的概率int flag = 0; //flag = 0代表 这个i饮料还在//默认构造:drink(){this->flag= 0;this->a = 0; this->b =0; this->p = 0;}
};vector<drink> vec;  //全局//处理输入:
void init()
{cin>>n>>x;drink tmp2;vec.push_back(tmp2); //index==0位置不用for(int i =1 ;i <=n;i++){drink tmp;cin>>tmp.a>>tmp.b>>tmp.p;vec.push_back(tmp);}
}//递归函数:func
double func(int i)
{double pi = vec[i].p;double ai = vec[i].a;int    bi = vec[i].b;double ans = ai;  //因为这一次选择了ai,一定会有一个基础的ai的钱需要花//选择第i个出货口后,进行递归模拟,出口是命中x或者i和bi都没了//case1:if(vec[i].flag == 0 && vec[bi].flag == 0){//i 和 bi都还在:double ans1 = 0;double ans2 = 0;//出货了 饮料i:vec[i].flag = 1;if(i == x){//ans1 = pi*ai;ans1 = 0;}else{ans1 = pi*func(i);}//出货了 饮料bivec[i].flag = 0;  //补货vec[bi].flag = 1; //出货if(bi == x){//ans2 = (1-pi)*ai;ans2 = 0;}else{ans2 = (1-pi)*func(bi);}//-返回://flag 改回去:vec[i].flag = 0;vec[bi].flag = 0;ans = ans + ans1 + ans2;return ans;}//case2:if(vec[i].flag == 0 && vec[vec[i].b].flag != 0){//只有 饮料i在 - 必定是出饮料i://如果饮料i 不是x 就必定凉凉:if(x == i){return ans;}else{ans = ans + ai;return ans;}}//case3:if(vec[i].flag != 0 && vec[vec[i].b].flag == 0){//此时bi可能需要进行递归:if(bi == x) {return ans;}else{vec[bi].flag = 1; //此时bi已经出货了ans = ans + func(bi);//记得返回之前完成补货:vec[bi].flag = 0;return ans;}}//case4:if(vec[i].flag != 0 && vec[vec[i].b].flag != 0){return ans;}}int main()
{init();//开启模拟double p0 = (double)(1/(double(n)));double myans = 0;for(int i = 1 ; i <=n ;i++){myans = myans + p0*func(i);}cout<<myans<<endl;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JS重点06】作用域(面试重点)

目录 一:局部作用域 1 函数作用域 2 块作用域 二:全局作用域 三:作用域链 变量查找机制: 本文章目标:了解作用域对程序执行的影响及作用域链的查找机制 作用域:规定了变量能够被访问的”范围“,离开这个”范围“变量便不能被访问 一:局部作用域 局部作用域分为…

CDR2024软件破解Keygen激活工具2024最新版

CorelDRAW Graphics Suite2024最新版&#xff0c;这是一款让我爱不释手的图形设计神器&#xff01;作为一个软件评测专家&#xff0c;我一直在寻找一款能够提升我的设计效率和创造力的工具。而这款软件&#xff0c;简直就是为我量身定制的&#xff01;&#x1f389; 「CorelDR…

C#进阶高级语法之LINQ

&#x1f433;简介 LINQ是C#编程语言中的一项强大功能&#xff0c;它通过将查询直接集成到编程语言中&#xff0c;大幅度简化了数据查询的代码编写工作。 LINQ的应用场景&#xff1a; 数据源支持&#xff1a;LINQ可查询的数据源类型极为广泛&#xff0c;包括SQL Server数据库…

插卡式仪器模块:示波器模块(插卡式)

• 12 位分辨率 • 125 MSPS 采样率 • 支持单通道/双通道模块选择 • 可实现信号分析 • 上电时序测量 • 抓取并分析波形的周期、幅值、异常信号等指标 • 电源纹波与噪声分析 • 信号模板比对 • 无线充电&#xff08;信号解调&#xff09; 通道12输入阻抗Hi-Z, 1 MΩ…

检索增强生成RAG需要用到的10个资源、工具和Python库

●10个资源和工具 在机器学习和自然语言处理领域&#xff0c;有多种工具和框架可用于实现和使用检索增强型生成&#xff08;RAG&#xff09;模型。以下是一些关键的资源和工具&#xff1a; Hugging Face Transformers&#xff1a; Hugging Face在其广泛使用的Transformers库…

CountDownLatch闭锁

Java并发库提供了CountDownLatch类来实现这个功能。 CountDownLatch类是一个同步工具类&#xff0c;在完成某些运算时&#xff0c;只有其他所有的运算全部完成&#xff0c;当前运算才继续执行。 下面是一个案例来说明CountDownLatch&#xff1a; 说明&#xff1a;当前有 5 个…

matlab使用教程(95)—显示地理数据

下面的示例说明了多种表示地球地貌的方法。此示例中的数据取自美国商务部海洋及大气管理局 (NOAA) 国家地理数据中心&#xff0c;数据通告编号为 88-MGG-02。 1.关于地貌数据 数据文件 topo.mat 包含地貌数据。topo 是海拔数据&#xff0c;topomap1 是海拔的颜色图。 load t…

java-ArrayList的底层原理

Java中的ArrayList是基于数组实现的动态数组&#xff0c;它提供了比标准数组更多的灵活性&#xff0c;特别是在大小方面。ArrayList的底层原理主要依赖于以下几个关键点&#xff1a; 1. 数组&#xff1a;ArrayList内部维护了一个数组&#xff0c;这个数组用于存储集合中的元素。…

nodejs 中 axios 设置 burp 抓取 http 与 https

在使用 axios 库的时候&#xff0c;希望用 burp 抓包查看发包内容。但关于 axios 设置代理问题&#xff0c;网上提到的一些方法不是好用&#xff0c;摸索了一段时间后总结出设置 burp 代理抓包的方法。 nodejs 中 axios 设置 burp 抓包 根据请求的站点&#xff0c;分为 http …

web前端:作业二

<!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>/* 1.将ul的子l…

Java加密体系结构参考指南-Java Cryptography Architecture

本文是从英文的官网摘了翻译的&#xff0c;用作自己的整理和记录。水平有限&#xff0c;欢迎指正。版本是&#xff1a;22 原文地址&#xff1a;https://docs.oracle.com/en/java/javase/22/security/java-cryptography-architecture-jca-reference-guide.html#GUID-815542FE-CF…

JavaScript学习|JavaScript 引入方式、JavaScript 基础语法、JavaScript 对象、BOM、DOM、事件监听、事件绑定

JavaScript 能做什么 1.能够改变文本内容 2.能够改变图像的src属性值 3.能够进行表单验证等 JavaScript 引入方式 内部脚本 1.内部脚本:将 JS代码定义在HTML页面中&#xff0c;JavaScript代码必须位于<script>与</script>标签之间。在 HTML 文档中可以在任意地…

C/C++学习笔记 C语言中的\0以及查找字符串中字符出现的频率

在此示例中&#xff0c;计算了字符串对象中字符的频率。 为此&#xff0c;使用size()函数查找字符串对象的长度。然后for 循环迭代直到字符串末尾。 在每次迭代中&#xff0c;检查字符是否出现&#xff0c;如果发现&#xff0c;则计数增加 1。 示例 1 #include <iostream&g…

在 Visual Studio 调试器中指定符号 (.pdb) 和源文件

程序数据库 (.pdb) 文件(也称为符号文件)将你在类、方法和其他代码的源文件中创建的标识符映射到在项目的已编译可执行文件中使用的标识符。 .pdb 文件还可以将源代码中的语句映射到可执行文件中的执行指令。 调试器使用此信息确定两个关键信息:显示在 Visual Studio IDE 中…

算法训练营day51

题目1&#xff1a;121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 要搞明白dp数组的含义&#xff0c; dp数组包含两种情况&#xff0c;持有股票&#xff0c;这个可以持有之前的也可以持有今天的&#xff1b;不持有股票&#xff0c;可以是之前就不持有&#…

家庭电脑私网如何访问阿里云服务器的指定端口

这里我们以在阿里云服务器上部署一个redis server 服务&#xff0c;对外开放6379端口为例子&#xff0c;其他端口类似。 1.获取当前电脑主机对应的公网IP, 可以https://tool.lu/ip/通过这个网站拿到。 2.阿里云服务器控制台设置防火墙&#xff0c;如下图所示&#xff0c;直接添…

Llama模型家族之Stanford NLP ReFT源代码探索 (三)reft_model.py代码解析

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

RapidMiner数据挖掘4 —— 决策树

0. 序章 0.1 文本说明 所有应用程序操作的名称和编程说明都以黄色背景书写&#xff0c;问题以蓝色背景书写&#xff0c;以方便他们在文本中识别。 在整个课程中&#xff0c;请逐步遵循所有说明&#xff0c;并确保获得预期结果&#xff0c;然后再继续下一部分或问题。 通过在Ub…

渗透测试之内核安全系列课程:Rootkit技术初探(四)

今天&#xff0c;我们来讲一下内核安全&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 目前&#xff0c;在渗透测试领域&#xff0c;主要分为了两个发展方向&#xff0c;分别为Web攻防领域和PWN&#xff08;二进制安全&#xff09;攻防领域。在…

汽车网络安全深入分析

汽车网络安全的重要性及背景 随着科技的飞速发展,汽车行业正经历着一场深刻的变革。汽车不再仅仅是一种交通工具,而逐渐演变成了一个具备高度智能化和互联化的复杂系统。在这个过程中,汽车网络安全的重要性日益凸显。 汽车网络安全的重要意义不言而喻。首先,它关乎到用户的…