算法---模拟(2)

news2024/11/25 2:44:33

目录

一、模拟算法题目

(1)神奇的幻方

(2)Proceting the Flower

(3)排座椅

(4)国王的游戏

 (5)字典序最大的子序列


一、模拟算法题目

(1)神奇的幻方

题目链接:神奇的幻方

题解:对于本题,其实难度不是很大,就是模拟,因为这是典型的模拟,锻炼了思维,所以我对于本题做了笔记。读了题我们知道从1到n*n我们对于每个数一个一个开始模拟,根据上一个数的状态推出当前数的状态。所以我设了三个数组,heng[i]表示数i在第几行,lie[i]表示数i在第几列,a[i][j]表示i行列的数是多少,然后开始一个一个推。

#include<bits/stdc++.h>
using namespace std;

int n;
int hang[1600],lie[1600];
int a[40][40];

int main()
{
	cin>>n;
	hang[1]=1;
	lie[1]=(n+1)/2;
	a[1][lie[1]]=1;
	for(int i=2;i<=n*n;i++){
		if(hang[i-1]==1&&lie[i-1]!=n){
			hang[i]=n;
			lie[i]=lie[i-1]+1;
			a[hang[i]][lie[i]]=i;
		}
		else if(hang[i-1]!=1&&lie[i-1]==n){
			hang[i]=hang[i-1]-1;
			lie[i]=1;
			a[hang[i]][lie[i]]=i;
		}
		else if(hang[i-1]==1&&lie[i-1]==n){
			hang[i]=2;
			lie[i]=n;
			a[hang[i]][lie[i]]=i;
		}
		else{
			int x=hang[i-1],y=lie[i-1];
			if(a[x-1][y+1]==0){
				hang[i]=x-1;
				lie[i]=y+1;
				a[hang[i]][lie[i]]=i;
			}
			else{
				hang[i]=x+1;
				lie[i]=y;
				a[hang[i]][lie[i]]=i;
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(j==n){
				cout<<a[i][j];
			}
			else{
				cout<<a[i][j]<<" ";
			}
		}
		cout<<endl;
	}
	return 0;
}

(2)Proceting the Flower

题目链接:Proceting the Flower

对于本题翻译成中文的意思是 :

农夫有n头牛跑到花田上吃草,农夫要把他们送回到自己的牛舍,所花的时间分别是t[i],单程时间是t[i],回来还要t[i],每头牛留在花田上每单位时间内吃花量为d[i]。求花田上最少被破坏的数量为多少?

题解:对于本题,假如a,b两头相邻的牛的顺序发送变化,假设a在b前,那么对于总体破坏花的数量 a前面并未发生变化,b后面也未发生变化,a前面并未与a,b相关,b后面是与总体相关,并未与个体相关。

推算如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
typedef struct{
	int t,d;
}node;
node a[100010];
struct rule{
	bool operator()(node x,node y){
		return x.t*y.d<y.t*x.d;
	}
};

int main()
{
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i].t>>a[i].d;
	}
	sort(a,a+n,rule());
	ll sum=0,t=0;
	for(int i=0;i<n;i++){
		sum+=t*a[i].d;
		t+=2*a[i].t;
	}
	cout<<sum;
	return 0;
}

(3)排座椅

题目链接:排座椅

题解:对于本题,横向和纵向是分开的,根据题意是想要分开更多的人交头接耳。那么根据题意横向分隔是不会影响行,纵向切割不影响列,所以如果分开哪一列或者哪一行的人数更多,就先用它,也就是需要排序。后面输出是根据序号从小到大,这也要注意。 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int  n,m,k,l,d;

typedef struct{
	int num;//隔开的人数
	int pos;//位置
}node;
node hang[1100],lie[1100];
//该排序规则使得某一种分隔方法人数多的在前面
struct rule1{
	bool operator()(node x,node y){
		return x.num>y.num;
	}
};
//该排序使得序号小的在前面
struct rule2{
	bool operator()(node x,node y){
		return x.pos<y.pos;
	}
};

int main()
{
	cin>>m>>n>>k>>l>>d;
	//序号位置初始化
	for(int i=1;i<=m;i++){
		hang[i].pos=i;
	}
	for(int i=1;i<=n;i++){
		lie[i].pos=i;
	}
	for(int i=1;i<=d;i++){
		int x,y,p,q;
		cin>>x>>y>>p>>q;
		if(x==p){
			//在同一行,用竖线隔开
			lie[min(y,q)].num++;
		}
		else{
			//同一列,因为是交头接耳,所以只有这两种情况
			hang[min(x,p)].num++;
		}
	}
	sort(hang+1,hang+1+m,rule1());
	sort(lie+1,lie+1+n,rule1());
	sort(hang+1,hang+1+k,rule2());
	sort(lie+1,lie+1+l,rule2());
	for(int i=1;i<=k;i++){
		if(i==k){
			cout<<hang[i].pos;
		}
		else{
			cout<<hang[i].pos<<" ";
		}
	}
	cout<<endl;
	for(int i=1;i<=l;i++){
		if(i==l){
			cout<<lie[i].pos;
		}
		else{
			cout<<lie[i].pos<<" ";
		}
	}
	return 0;
}

(4)国王的游戏

题目链接:国王的游戏

题解:本题应该用高精度算法,但是我只想写下这种类型的题目具体思路,方便以后复习,所以就没有写全,不能完全AC(加上高精度即可AC)。

本题与第二题一样的思路,都是推理,两个位置的相对交换对于前后没有影响,只对于他们两有变化,具体推理如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
typedef struct{
	int l,r;
}node;
struct rule{
	bool operator()(node x,node y){
		return x.l*x.r<y.l*y.r;
	}
};
node a[1100];

int main()
{
	cin>>n;
	for(int i=0;i<=n;i++){
		cin>>a[i].l>>a[i].r;
	}
	sort(a+1,a+1+n,rule());
//	cout<<"sort后"<<endl;
	ll sum=a[0].l;
	sum=sum*a[1].l;
	for(int i=2;i<n;i++){
		//注意是i<=n,不能等于n,因为是前一个大臣左手的数,不包括自己的左手
		sum=sum*a[i].l;
	}
//	cout<<"sum="<<sum<<endl;
	cout<<sum/a[n].r;
	return 0;
}

 (5)字典序最大的子序列

题目链接:字典序最大的子序列 

题解:对于本题,字典序最大得子序列,先创建一个字符,每一添加点前字符串的字符,遍历每个字符,从后往前,字符小就删除。

#include<bits/stdc++.h>
using namespace std;

string s,ans;

int main()
{
	cin>>s;
	int l=s.size();
	for(int i=0;i<l;i++){
		while(ans.size()&&ans.back()<s[i]){
			ans.pop_back();
		}
		ans+=s[i];
	}
	cout<<ans;
	return 0;
}

 

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

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

相关文章

Spring源码下载

一、Spring | Home 二、Projects->Spring Framework 三、点击小猫图片进入Spring Framework的代码仓 四、选择感兴趣的分支

如何实现高性能点赞(二)

1.3 Redis 的数据结构类型 Redis 可以存储键与5种不同数据结构类型之间的映射&#xff0c;这5种数据结构类型分别为String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;和 Zset&…

Mac M2芯 超详细k8s集群实战 - kubeadm

概述 我们准备搭建kubeadm的masterworker集群&#xff0c;实现k8s集群&#xff0c;master、worker在虚拟机上来执行&#xff0c;中间遇到了超级多的坑&#xff0c;都搞定了之后&#xff0c;在这里系统的总结一下&#xff0c;这也是一篇学习笔记。 这篇比较难搞&#xff0c;如…

【网络安全】Fastjson的反序列化漏洞复现

1.漏洞概述 Fastjson提供了autotype功能&#xff0c;允许用户在反序列化数据中通过“type”指定反序列化的类型&#xff0c;Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法&#xff0c;那么当组件开启了autotype功能并且反序列化不可信数据时&…

qt简单UI使用

geometry设置窗口大小 font字体大小 text改文件名

本地使用隧道或代理访问云服务器数据库

本地使用代理访问云服务器数据库 场景&#xff1a; 项目的测试环境是部署至云服务器上的&#xff0c;有时候云服务器的项目测试出现了一些问题&#xff0c;为了方便复现就在本地直连云服务器的数据库&#xff08;mysql服务器&#xff09;。但是云服务器是有三台机子&#xff0…

性能测试工程师技术履历表

技术履历表 基本情况 姓名 XXX 年龄 26 性别 男 工作年限 3-4 岗位 性能测试工程师 毕业院校和专业 武汉软件工程职业学院 学历 大专 技能评价 1、熟悉基于Http&#xff0c;TCP等协议的脚本开发。 2、 熟练掌握&#xff1a;Loadrunner等压测工具。 3、 掌握Linu…

Echosync 一款优秀的文件夹同步和备份软件

Echosync 一款优秀的文件夹同步和备份软件 通过执行差异数据备份、文件同步&#xff0c;这样可以避免传递自上次备份以来所做的更改&#xff0c;Echosync能够检测到移动或重命名自上次备份的文件。 下载 Echosync 软件介绍 VHD中备份文件 你的文件可以保存到单个 VHD 文件…

RK3568 ov5695摄像头

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、什么是mipi接口&#xff1f;二、摄像头是如何把数据给到RK3568,又是如何处理硬件连接关系图&#xff1a;图像数据的来龙去脉代码路径三、如何移植修改设备树…

高通开发系列 - 数字和模拟codec驱动

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 MSM89XX音频硬件框架Linux kernel驱动LPASS的地址空间PM和PMI的区别PM8953简介Slave ID从设备idPM89xx中的模拟codec驱动准备codec的驱…

进程退出与等待

1️⃣ 进程退出 正常终止 main函数的返回调用exit_exit 异常终止 Ctrl c (信号终止) 1.main函数的返回就是return 0&#xff1b;程序退出这个在高级语言里面就学过了不多说。 2.exit(x)的使用如下 第一次测试&#xff1a;错误码与main函数里面打印的值。 第二次测试&#xf…

[oeasy]python0033_任务管理_jobs_切换任务_进程树结构_fg

查看进程 回忆上次内容 上次先进程查询 ps -elf 查看所有进程信息ps -lf 查看本终端相关进程信息 杀死进程 kill -9 PID 给进程发送死亡信号 运行多个 python3 show_time.py 的话 各个进程独立python3 show_time.py 大概 8M各占内存这些进程之间是什么关系呢&#xff1f;&…

秦海璐、宋轶现身,岳云鹏孙越成谜,央视春晚第一次彩排姗姗来迟

最近一段时间&#xff0c;全国各地的朋友都在积极行动&#xff0c;都想推迟成为小阳人的时间&#xff0c;却险些忘了一件大事。伴随着春节的临近&#xff0c;每年的央视春晚都倍受期待&#xff0c;今年当然也不例外&#xff0c;可是却一直没有央视春晚的消息。 就在大家都认为&…

利用adb查找手机定位,并且打开地图定位

可以使用 Android Debug Bridge (ADB) 工具来查找手机的位置信息。 首先&#xff0c;您需要确保手机已连接到电脑&#xff08;内网穿透或者搭建虚拟局域网&#xff09;&#xff0c;并且已在手机上启用 USB 调试。然后&#xff0c;您可以在电脑的命令提示符下使用 ADB 命令来查询…

小程序框架

目录 一&#xff0c;框架 二&#xff0c;响应的数据绑定 三&#xff0c;页面管理 四&#xff0c;基础组件 逻辑层 App Service 五&#xff0c;小程序的生命周期 六&#xff0c;注册页面 1.使用 Page 构造器注册页面 2.在页面中使用 behaviors 3.使用 Component 构造器…

[HAL库]STM32 ADC功能和DMA读数据的方法

这篇博客记录下 STM32F103R8T6 是怎么开ADC、用DMA搬数据的方法。方便日后使用的时候查资料。 DMA其实就是个搬运工&#xff0c;专门负责搬数据&#xff0c;没有DMA之前&#xff0c;搬数据是由MCU核心来负责&#xff0c;虽说都能完成搬数据的动作&#xff0c;但是MCU干这件事浪…

1.从一次提交中思考代码性能优化和stream的使用

前言 其实由来很简单&#xff0c;我们用了一个第三方的开源平台&#xff0c;这个平台基于 ruoyi 3.8.1 开发&#xff0c;我想后续同步到ruoyi的最新版 今天看的是 一个字典查询的commit&#xff0c;我们下来看下这次提交是如何优化的 分析 开门见山&#xff0c;我们看下代码…

PowerTCP FTP for .NET对.NET 7的支持

PowerTCP FTP for.NET是一个高级FTP和FTPS类库&#xff0c;具有易于使用的接口。它具有泛型、IPv6、双堆栈套接字、并发会话mX509证书&#xff0c;并包括完整的SSL和TLS集成。 用于.NET功能的PowerTCP FTP 流接口支持在没有文件访问的情况下创建或检查内存中的数据。 可序列…

过年不再被逼相亲——我用python给亲戚展示2022的相亲数据

人生苦短 我用Python 这不是快过年了吗&#xff1f; 又到了一年一度的亲戚大考验环节… 没对象的他们会问你&#xff0c;找对象了吗&#xff1f; 你要是学计算机专业的&#xff0c;他们会问你&#xff0c;会修电脑吗&#xff1f; 出去学了点啥他们也会要求“才艺展示一下 …

少儿Python每日一题(2):整数的位数

原题解答 本次的题目如下所示&#xff08;原题出处&#xff1a;蓝桥杯&#xff09;&#xff1a; 【编程实现】 输入一个正整数&#xff0c;输出这个正整数是一个几位数。 输入描述&#xff1a;输入一个正整数 输出描述&#xff1a;输出这个正整数是一个几位数 【样例输入】 12…