【Week 12 作业】必做题

2023-05-16

Week12必做题

  • 必做题1
      • 题目描述
      • 输入格式
      • 输出格式
      • 输入样例
      • 输出样例
      • 代码
  • 必做题2
      • 题目描述
      • 输入格式
      • 输出格式
      • 输入样例
      • 输出样例
      • 思路
      • 注意
      • 代码
  • 必做题3
      • 题目描述
      • 输入格式
      • 输出格式
      • 输入样例
      • 输出样例
      • 思路
      • 代码

必做题1

题目描述

给出n个数,zjm想找出出现至少(n+1)/2次的数, 现在需要你帮忙找出这个数是多少?

输入格式

本题包含多组数据:

每组数据包含两行。

第一行一个数字N(1<=N<=999999) ,保证N为奇数。

第二行为N个用空格隔开的整数。

数据以EOF结束。

输出格式

对于每一组数据,你需要输出你找到的唯一的数。

输入样例

5
1 3 2 3 3
11
1 1 1 1 1 5 5 5 5 5 5
7
1 1 1 1 1 1 1

输出样例

3
5
1

代码

#include <iostream>
#include <map>
using namespace std;

int main(int argc, char** argv) {
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		map<int,int>mp;
		for(int i=0;i<n;i++)
		{
			int now;
			scanf("%d",&now);
			if(mp.find(now)!=mp.end())
			{
				mp[now]++;
			}
			else
			{
				mp[now]=1;
			}
		}
		for(auto it=mp.begin();it!=mp.end();it++)
		{
			if(it->second>=(n+1)/2)
			{
				printf("%d\n",it->first);
				break;
			}
		}
	}
	return 0;
}

必做题2

题目描述

zjm被困在一个三维的空间中,现在要寻找最短路径逃生!

空间由立方体单位构成。

zjm每次向上下前后左右移动一个单位需要一分钟,且zjm不能对角线移动。

空间的四周封闭。zjm的目标是走到空间的出口。

是否存在逃出生天的可能性?如果存在,则需要多少时间?

输入格式

输入第一行是一个数表示空间的数量。

每个空间的描述的第一行为L,R和C(皆不超过30)。

L表示空间的高度,R和C分别表示每层空间的行与列的大小。

随后L层,每层R行,每行C个字符。

每个字符表示空间的一个单元。’#‘表示不可通过单元,’.'表示空白单元。

zjm的起始位置在’S’,出口为’E’。每层空间后都有一个空行。

L,R和C均为0时输入结束。

输出格式

每个空间对应一行输出。

如果可以逃生,则输出如下

Escaped in x minute(s).

x为最短脱离时间。
如果无法逃生,则输出如下

Trapped!

输入样例

3 4 5
S...
.###.
.##..
###.#
#####
#####
##.##
##…
#####
#####
#.###
####E
1 3 3
S##
#E#
###
0 0 0

输出样例

Escaped in 11 minute(s).
Trapped!

思路

从起点开始在迷宫中进行BFS,因为是三维空间,所以每个点BFS时有六个方向,每当搜索到一个新的位置,将这一位置置为起点到该点的步数,直到遇到终点停止搜索。若搜索结束仍未到达终点,则终点不可达。

注意

这里需要注意的是使用scanf依次读入字符时行末换行的处理,开始想使用getchar()来在行末读取空行,但程序提交时出现运行时错误。
可在scanf中的%c前加空格,或者使用cin来解决。

代码

#include <iostream>
#include<stdio.h>
#include <queue>
using namespace std;
const int size=50;
int mp[size][size][size];
struct Node{
	int x,y,z;
	Node(int _x,int _y,int _z)
	{
		x=_x;y=_y;z=_z;
	}
};
int dx[]={1,-1,0,0,0,0};
int dy[]={0,0,1,-1,0,0};
int dz[]={0,0,0,0,1,-1};
int main(int argc, char** argv) {
	int l,r,c;
	while(scanf("%d%d%d",&l,&r,&c)&&(l!=0||r!=0||c!=0))
	{
		int sx,sy,sz,tx,ty,tz;
		char temp;
		for(int i=1;i<=l;i++)
		{
			for(int j=1;j<=r;j++)
			{	
				//getchar()
				for(int k=1;k<=c;k++)
				{
					scanf(" %c",&temp); 
					//cin>>temp;
					if(temp=='S')
					{
						sz=i;sy=j;sx=k;
						mp[i][j][k]=0;
					}
					else if(temp=='E')
					{
						tz=i,ty=j;tx=k;
						mp[i][j][k]=-1;
					}
					else if(temp=='.')
						mp[i][j][k]=-1;
					else
					    mp[i][j][k]=-2;
				}
			}
		}
		queue<Node> q;
		q.push({sx,sy,sz});
		while(!q.empty())
		{
			Node now=q.front();
			q.pop();
			if(now.x==tx&&now.y==ty&&now.z==tz)
				break;
			int step=mp[now.z][now.y][now.x];
			for(int i=0;i<6;i++)
			{
				if(now.z+dz[i]>=1&&now.z+dz[i]<=l 
					&&now.y+dy[i]>=1&&now.y+dy[i]<=r
					&&now.x+dx[i]>=1&&now.x+dx[i]<=c
					&&mp[now.z+dz[i]][now.y+dy[i]][now.x+dx[i]]==-1)
				{
					mp[now.z+dz[i]][now.y+dy[i]][now.x+dx[i]]=step+1;
					q.push({now.x+dx[i],now.y+dy[i],now.z+dz[i]});
				}
			}
		}
		if(mp[tz][ty][tx]!=-1)
			printf("Escaped in %d minute(s).\n",mp[tz][ty][tx]);
		else
			printf("Trapped!\n");
	}
	return 0;
}

必做题3

题目描述

东东每个学期都会去寝室接受扫楼的任务,并清点每个寝室的人数。

每个寝室里面有ai个人(1<=i<=n)。从第i到第j个宿舍一共有sum(i,j)=a[i]+…+a[j]个人

这让宿管阿姨非常开心,并且让东东扫楼m次,每一次数第i到第j个宿舍sum(i,j)

问题是要找到sum(i1, j1) + … + sum(im,jm)的最大值。且ix <= iy <=jx和ix <= jy <=jx的情况是不被允许的。也就是说m段都不能相交。

注:1 ≤ i ≤ n ≤ 1e6 , -32768 ≤ ai ≤ 32767 人数可以为负数。。。。(1<=n<=1000000)

输入格式

输入m,输入n。后面跟着输入n个ai

输出格式

输出最大和

输入样例

1 3 1 2 3
2 6 -1 4 -2 3 -2 3

输出样例

6
8

思路

这里采用动态规划的思想。
设状态dp[i][j]为将前j个元素取i个子串的最大子串和,其中必取第j个元素a[j](若不取第j个元素,这一情况在d[i][k],k<j中必然已经讨论过了)。

所以状态转移方程dp[i][j]=max(dp[i][j-1]+a[j],dp[i-1][k]+a[j]),其中i-1=<k<j,max参数前者为将a[j]并入dp[i][j-1]的最后一个子串,后者为a[j]独自为一串。

但这样dp数组的空间复杂度太高,从转移方程可以看出,计算dp[i][j]只需要知道dp[i][j-1],以及dp[i-1][k](i-1=<k<=j)中的最大值即可

所以我们可以将dp数组第一维去掉,使用另一个一维数组fmax来记录将从j个元素中取i-1段中的最大值(即前一个状态中仅考虑前j个元素的最大值),dp数组仅记录当前状态,即从前j个元素中取i段时的最大子串和。

所以转移方程变为,dp[j]=max(dp[j-1]+a[j],fmax[j-1]+a[j])。
最终答案即为dp数组中的最大值。

代码

#include <iostream>
#include<string.h>
using namespace std;
const int inf=1e9;
const int size=1e6+10;
int a[size];
int  dp[size];
int fmax[size];
int main(int argc, char** argv) {
	int m,n;
	while(scanf("%d%d",&m,&n)!=EOF)
	{
		for(int i=1;i<=n;i++)
			scanf("%d",&a[i]);
		int ans;
		dp[0]=0;
		memset(fmax,0,sizeof(fmax));
		for(int i=1;i<=m;i++)
		{
			ans=-inf;
			for(int j=i;j<=n;j++)
			{
				dp[j]=max(dp[j-1]+a[j],fmax[j-1]+a[j]);
				fmax[j-1]=ans;
				ans=max(ans,dp[j]);
				//cout<<ans<<endl;
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Week 12 作业】必做题 的相关文章

随机推荐

  • Linux嵌入式终端的脚本,检测有没插网线

    span class token shebang important bin sh span span class token assign left variable NETWORK span span class token opera
  • Ubuntu20.04系统下进行复制粘贴文件显示没有权限的解决办法

    Ctrl 43 alt 43 T打开终端输入命令sudo nautilus然后就可以打开一个不需要管理员权限的界面 xff0c 可以直接复制粘贴 亲测有效 xff01 xff01 借鉴于博客 xff1a https blog csdn ne
  • Ubuntu20.04安装anaconda3成功以后,找不到conda命令

    原因 xff1a 环境设置没有更新 解决办法 xff1a 注意路径 xff01 找到anaconda安装完成后生成的文件夹位置 相应修改 xff0c 如下图我的位置就在主目录下 xff1a 因此 xff0c 我执行的命令为 xff1a ec
  • ubuntu16.04 opencv打开摄像头失败

    ubuntu16 04 opencv打开摄像头失败 按照opencv检测AruCo标记教程 xff0c 运行程序时打开摄像头失败 xff0c 使用的相机是Intel RealSense D435 发生问题的代码如下 span class t
  • 计算机视觉学习笔记&思维导图(一起轻松学习计算机视觉与图像处理)

    文章目录 前言一 思维导图二 笔记勘误 前言 本文为计算机视觉课程期末复习的笔记 xff0c 编者耗时近半个月整理而成 内容依据课程的学习资料以及查阅网上一些资料梳理得到的 xff0c 编者希望在应付考试的同时能够将计算机视觉的知识体系建立
  • python发送邮件

    text 61 39 亲爱的Jerry 我是你的邻居Tom xff01 5 1邀请你来参加劳动 xff01 CALL ME xff1a 123 64 qq com 39 from email mime text import MIMETex
  • Python实现微信自动化发送信息

    需求 xff1a 利用PC端微信实现自动向文件传输助手 xff0c 好友等发送信息 库说明 psutil 获取系统运行的进程和系统利用率 xff08 包括CPU 内存 磁盘 网络等 xff09 信息 xff0c 用于获取进程ID pywin
  • 数据类型——枚举

    文章目录 枚举是什么枚举的声明枚举与其他数据类型的转换与int类型转换枚举转intint转枚举 与string类型转换枚举转字符串字符串转枚举 枚举的意义是什么 枚举是什么 在c 中 xff0c 枚举 enumeration 是一种数据类型
  • C# 调用WebService的方式汇总

    C 调用WebService的方式汇总 方式一 xff1a 根据提供的webservice地址 xff0c 用VS自带工具生成cs文件 xff0c 添加到项目中使用即可 方式二 xff1a 根据webservice地址 xff0c 动态在项
  • npm 报错:`[HPM] Error occurred while trying to proxy request (ECONNREFUSED)`

    npm 报错 xff1a HPM Error occurred while trying to proxy request users from localhost 8000 to https localhost 5000 ECONNREF
  • selenium Grid 4.x版本 部署操作 笔记

    selenium Grid 4 x版本 部署操作 笔记 selenium Grid 是 selenium套件 的一部分 xff0c 实现分布式测试 xff0c 多用于浏览器兼容性测试 使用 hub nodes 理念 xff1a 一台 hub
  • 图解辗转相除法

    前言 虽然在很久很久以前刚入门ACM的时候就已经知道辗转相除法的存在 xff0c 并且也用GCD解了不少题 xff0c 不过说实话辗转相除法的原理一直不是很清楚 直到最近做到这样一道题 Codeforces 343A xff0c 本以为是一
  • 【程序设计思维与实践 Week2 实验C】瑞神打牌

    题意 xff1a 牌局由四个人构成 xff0c 围成一圈 我们称四个方向为北 东 南 西 对应的英文是North xff0c East xff0c South xff0c West 游戏一共由一副扑克 xff0c 也就是52张构成 开始 x
  • 【程序设计思维与实践 Week5 作业D】滑动窗口

    题目描述 xff1a 有一个长度为 n 的数列和一个大小为 k 的窗口 窗口可以在数列上来回移动 现在 我们想知道在窗口从左往右滑的时候 xff0c 每次窗口内数的最大值和最小值分别是多少 例如 xff1a 数列是 1 3 1 3 5 3
  • 【Week8 CSP-M2 C】咕咕东的奇妙序列

    题目描述 格式说明 样例输入 样例输出 数据规模 思路 由题知 xff0c 这个无限序列的第i部分是从1 i的子序列 xff0c 该解法的大体思路是我们首先确定要查询的项 设为k项 在无限序列的第几部分 第几个子序列 xff0c 然后再从这
  • 【Week 8 作业A】区间选点II

    题目描述 给定一个数轴上的 n 个区间 xff0c 要求在数轴上选取最少的点使得第 i 个区间 ai bi 里至少有 ci 个点 输入格式 输入第一行一个整数 n 表示区间的个数 xff0c 接下来的 n 行 xff0c 每一行两个用空格隔
  • 【Week 8 作业 B】猫猫向前冲

    题目描述 众所周知 xff0c TT 是一位重度爱猫人士 xff0c 他有一只神奇的魔法猫 有一天 xff0c TT 在 B 站上观看猫猫的比赛 一共有 N 只猫猫 xff0c 编号依次为1 xff0c 2 xff0c 3 xff0c xf
  • 【Week 9 作业 A】咕咕东的目录管理器

    题目描述 咕咕东的雪梨电脑的操作系统在上个月受到宇宙射线的影响 xff0c 时不时发生故障 xff0c 他受不了了 xff0c 想要写一个高效易用零bug的操作系统 这工程量太大了 xff0c 所以他定了一个小目标 xff0c 从实现一个目
  • 【Week 11 作业】必做题

    Week 11 必做题 A 必做题 1题目描述输入格式输出格式输入样例输出样例思路代码 B 必做题 2题目描述输入格式输出格式数据范围样例输入样例输出思路代码 C 必做题 3题目描述输入格式输出格式样例输入样例输出思路代码 D 必做题 4题
  • 【Week 12 作业】必做题

    Week12必做题 必做题1题目描述输入格式输出格式输入样例输出样例代码 必做题2题目描述输入格式输出格式输入样例输出样例思路注意代码 必做题3题目描述输入格式输出格式输入样例输出样例思路代码 必做题1 题目描述 给出n个数 xff0c z