程序设计思维与实践week12作业

2023-05-16

文章目录

  • A - 必做题 - 1 HDU - 1029
    • 描述
    • 输入
    • 输出
    • 样例
    • 想法
    • 代码
  • B - 必做题 - 2 POJ - 2251
    • 描述
    • 输入
    • 输出
    • 样例
    • 想法
    • 代码
  • C - 必做题 - 3 HDU - 1024
    • 描述东东每个学期都会去寝室接受扫楼的任务,并清点每个寝室的人数。
    • 输入
    • 输出
    • 样例
    • 想法
    • 代码

A - 必做题 - 1 HDU - 1029

描述

给出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

想法

首先对输入的数进行排序,然后从左到右遍历计算每一段相同数字的个数,如果个数大于等于(n+1)/2则输出;

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int n;
int num[maxn];
int main(){
    while(cin>>n){
        int p=(n+1)/2;
        for(int i=0;i<n;i++)
            scanf("%d",&num[i]);
        sort(num,num+n);

        int ans=0,count=0,nownum=num[0];
        for(int i=0;i<n;i++){
            if(num[i]==nownum){
                count++;
                if(count>=p){
                    cout<<num[i]<<endl;
                    break;
                }
            }
            else{
                nownum=num[i]; count=1;
            }
        } 
    }
    return 0;
}

B - 必做题 - 2 POJ - 2251

描述

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!

想法

可以把这道题当做图遍历问题,三维的遍历;
创建三维数组mp记录迷宫每个点是否可以通过,1代表不能通过,并在输入过程中记录起点和终点。采用队列的bfs搜索进行走迷宫模拟,六个方向在常量数组dx,dy,dz中给出。注意bfs遍历过程中边界的判断以及队列元素的删除。用标记flag记录是否成功。

代码

#include<iostream>
#include<queue>
#include<string.h>
using namespace std;
int L,R,C,step,flag;
int sx,sy,sz,ex,ey,ez;
int mp[35][35][35];
int dx[6]={0,0,0,0,1,-1};
int dy[6]={0,0,1,-1,0,0};
int dz[6]={1,-1,0,0,0,0};
struct place{//节点结构体;
    int x,y,z,step;//步长;
    place(int a,int b,int c,int d){
       x=a,y=b,z=c,step=d;
    }
};

queue<place> q;
int vis[35][35][35];

void init(){
    step=0,flag=0;
    memset(mp,0,sizeof(mp));
    memset(vis,0,sizeof(vis));
    while(!q.empty())q.pop();
}

int main()
{
  while (1){
      init();
      cin>>L;cin>>R;cin>>C;
      if(L==0&&R==0&&C==0)break;
      char c;
      for(int i=0;i<L;i++){
        for(int j=0;j<R;j++)
            for(int k=0;k<C;k++){
                cin>>c;
				if(c == '#') mp[i][j][k]=1;
                if(c == 'S') sx=i,sy=j,sz=k;
                if(c == 'E') ex=i,ey=j,ez=k;
            }
      }
      
      q.push(place(sx,sy,sz,0));
      vis[sx][sy][sz]=1;
      while(!q.empty()){
         place nowp=q.front();
         q.pop();//不丢;
         for(int i=0; i<6; i++){
             int nx=nowp.x+dx[i];
             int ny=nowp.y+dy[i];
             int nz=nowp.z+dz[i];
             if( mp[nx][ny][nz]!=1 && vis[nx][ny][nz]==0 
                &&nx>=0 &&nx<L &&ny>=0 &&ny<R &&nz>=0 &&nz<C){
                   q.push(place(nx,ny,nz,nowp.step+1));
                   vis[nx][ny][nz]=1;
                }
         }
         if(vis[ex][ey][ez]==1){
             flag=1;step=nowp.step+1;break;
         }
      }
      if(flag==1)printf("Escaped in %d minute(s).\n",step);
      else printf("Trapped!\n");
  }
  return 0;
}

C - 必做题 - 3 HDU - 1024

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

每个寝室里面有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 处理到 EOF

输出

输出最大和

样例

输入:

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

输出:

6
8 

Hint:数据量很大,需要scanf读入和dp处理。

想法

动态规划问题,定义dp[i][j]为前j个宿舍取i组获得的最大值,第j个宿舍必须包含在其中;状态转移方程较难:
dp[i][j]=max{dp[i][j−1],max(dp[i−1][k],1≤k≤j−1)}+A[j]
1,即考虑加入宿舍j,第一种情况是j加入最后一组,dp[i][j-1]直接加上A[j]。
2,第二种情况是j自己成为一组,加上前边的j-1个宿舍(可以不包含j-1)分成,i-1组的最大值。
由于数据范围太大,我们考虑降到一维。对于这个最大值,我们用p[]保存,dp[i]表示取到第i个房间的最大值;

for(int i=1;i<=m;i++){//层数 
			ans=-maxn1;
			for(int k=i;k<=n;k++){//最右边界; 
				dp[k]=max(dp[k-1]+a[k],p[k-1]+a[k]);
				p[k-1]=ans;
				ans=max(ans,dp[k]);//保证是当前层最大值; 
			}
		} 

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn1=1e9;
const int maxn2=1e6+10;
int a[maxn2];
int dp[maxn2],p[maxn2];
int m,n,ans;

int main()
{
	while(scanf("%d%d",&m,&n)!=EOF){
		ans=0;
		memset(dp,0,sizeof(dp));
		memset(p,0,sizeof(p));
		for(int i=1;i<=n;i++)scanf("%d",&a[i]);
		
		for(int i=1;i<=m;i++){//层数 
			ans=-maxn1;
			for(int k=i;k<=n;k++){//最右边界; 
				dp[k]=max(dp[k-1]+a[k],p[k-1]+a[k]);
				p[k-1]=ans;
				ans=max(ans,dp[k]);//保证是当前层最大值; 
			}
		} 
		printf("%d\n",ans);	
	}
	return 0;
 } 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序设计思维与实践week12作业 的相关文章

  • CentOS 安装 转码软件FFMPeg

    FFmpeg是一个自由软件 xff0c 可以运行音频和视频多种格式的录影 转换 流功能 xff0c 包含了 libavcodec 这是一个用于多个项目中音频和视频的解码器库 xff0c 和libavformat 一个音频与视频格式转换库 通
  • 使用 Docker 部署 minio 文件服务器

    一 获取镜像 span class token variable docker span span class token variable search span span class token variable minio span
  • Docker 安装 Nginx 与 配置 环境

    Nginx 是一个高性能的 HTTP 和反向代理 web 服务器 xff0c 同时也提供了 IMAP POP3 SMTP 服务 Nginx 镜像库地址 通过 Sort by 查看其他版本的 Nginx xff0c 默认是最新版本 nginx
  • RabbitMQ安装部署命令

    一 Docker安装部署RabbitMQ 1 通过Docker拉取镜像 docker pull rabbitmq span class token punctuation span span class token number 3 7 s
  • Docker 同步系统时间问题

    查看当前时区 系统时区是通过符号链接 etc localtime 到目录中的二进制时区标识符来 配置的 usr share zoneinfo span class token variable timedatectl span span c
  • 制作Ghost备份与还原

    用Ghost手动备份系统 用Ghost手动备份系统 xff0c 主要是针对组装电脑而言 xff0c 至于品牌机 xff0c 它都会有自己的系统恢复工具 xff0c 所以不在此列 现在很多人对在使用电脑中出现系统崩溃的故障 xff0c 都会采
  • Docker 安装部署 neo4j

    Neo4j是一个高性能的 NOSQL图形数据库 xff0c 本身就支持集群部署 xff0c 今天要搭建的就是neo4j的因果集群 xff0c 其中分为 xff1a 核心节点 xff1a core server xff0c 可以对数据进行读写
  • 【FTP工具】FileZila安装以及使用详解

    一 FTP概念 安装FTP主要是为了传输文件 xff0c FTP是持久的 xff0c 只有一次认证过程 xff0c 传输多个文件都是使用同一个连接 因为FTP就是为远程文件交互而设计的 xff0c 有些时候只是为了单纯做一个文件传输 xff
  • 【.dll 没有被指定在windows上运行】

    修复 xff08 重新注册DLL xff09 的具体步骤如下 xff1a 方法一 xff1a 1 快捷键win 43 r打开 运行 输入cmd 点击确定打开命令提示符窗口 2 复制 xff1a for 1 in windir system3
  • 在 Centos7 安装 Docker 详细命令行

    Docker 要求 CentOS 系统的内核版本高于 3 10 xff0c 查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 一 yum源安装docker 1 通过 uname r 命令查看你当前的内核版本 2 使用
  • 怎样将虚拟机文件拷贝至另一台虚拟机?

    1 想要将Master虚拟机中hadoop账户的zookeeper文件拷贝至Slave1虚拟机中 2 将文件打包 3 在Master虚拟机的主文件夹中有着打包好的zookeeper压缩包 4 将压缩包发送至Slave1虚拟机的hadoop账
  • linux 将某个文件夹移动到另一个文件夹下

    若要将某个文件夹整体移动到其它文件夹下 xff0c 可以使用如下命令 mv dir1 dir2 比如我要将上一级目录下的 data 文件夹移动到当前目录下 xff0c 可以使用下面命令 mv data 说明 其中 dir1 参数为 data
  • nextcloud 没有安装 “smbclient“. 无法挂载 “SMB / CIFS“

    Centos7安装apt get 第一步就是下载apt get curl https raw githubusercontent com dvershinin apt get centos master apt get sh o usr l
  • RedHat/CentOS8【OpenSSL】制作自签证书和 HTTPS 配置

    1 OpenSSL 制作自签名证书 1 1 第一阶段 xff1a 制作 CA 根证书 1 2 第二阶段 xff1a 制作服务器证书 1 3 第三阶段 xff1a 制作客户端证书 xff08 双向认证使用 xff09 2 Web 容器配置 H
  • centos安装horizon client

    https blog 51cto com chelaoer 4741839 CentOS 6 6安装Horizon View Client3 4 转载 圪蹴哈么2021 12 03 14 33 40博主文章分类 xff1a 运维 文章标签c
  • 构造函数的4种使用方式总结

    我们无法像调用成员函数那样使用对象来调用构造函数 xff0c 因为在构造函数构造出对象之前 xff0c 对象是不存在的 xff0c 因此构造函数被用来创建对象 xff0c 而不能通过对象来调用 C 43 43 提供了多种使用构造函数初始化创
  • 干线协议(802.1q/ISL)

    干线协议 802 1q交换机针对vlan tag数据帧的处理 ISL 802 1q 一台交换机收到一个数据帧 需要判断其属于哪一个vlan 有两种方法 1 让数据帧带上vlan tag 通过识别tag得知所属vlan 2 给交换机一张表 表
  • Python使用集合将txt文件重复行去除

    最近爬取了百度百科一些关键词的infobox xff0c 由于关键词也是从百度百科页面大量爬取的 xff0c 其中有诸多重复 xff0c 于是使用集合将重复的关键词去掉 xff0c 此方法也适用于其他类型重复行的去除 span class
  • Linux常用命令之软件包管理

    软件包管理 软件包分类 源码包 直接可以看到源码 需要手动编译 安装速度慢 脚本安装包 xff08 部分源码包将安装过程写成脚本 xff0c 交互式安装 xff09 二进制文件包 RPM 系统默认包 已经编译好 安装速度快 rpm命令管理
  • 【Windows11】麦克风不能用、扬声器不能用的解决办法

    这是一个目录0 0 前言扬声器不能用的解决办法麦克风不能用的解决办法 前言 最近笔者刚买的麦克风和扬声器 xff0c 插到电脑上居然不能用 一通排查之后发现原来是Windows系统内的一个设置不对 xff0c 下面是具体解决办法 xff08

随机推荐

  • python django mysql语句增删改查+报错execute() takes from 2 to 3 positional arguments but 4 were given

    python django框架 xff0c 进行增删改查语句 xff1a 1 查询 xff08 1 xff09 正确的写法如下 xff0c cursor execute那句 sql的所有参数 xff0c 应该都写到中括号里面 xff0c 以
  • 方法的形参和实参

    引用博客 博客 何为形参 实参 xff1a 方法定义时的参数称为形式参数 xff0c 简称形参 xff1b 方法调用时的传入参数称为实际参数 xff0c 简称实参 xff1b 实参和形参的类型要一致或兼容 个数 顺序必须一致 例如 span
  • 在linux(debian/ubuntu)中idea的插件默认安装位置和配置文件在哪里?亲测可用

    在 home 当前用户名 config JetBrains IntelliJIdea2020 具体版本号 options 目录下 我的debian10 其他的linux系统应该也在相同的位置
  • 中国电信修改光猫路由模式为桥接模式

    首先 需要搞到超级管理员的账号和密码 可以上网根据光猫型号查找 也可以直接跟安宽带的工作人员要 第一步 准备超级管理员账号和密码 可以自行根据光猫型号搜索 也可以直接跟安宽带的工作人员要 第二步 使用超级管理员账密登录网关管理页面 光猫 一
  • maven官网应该下载binary还是sources

  • Linux(Debian11)iptables放行所有端口

    iptables P INPUT ACCEPT iptables P OUTPUT ACCEPT iptables P FORWARD ACCEPT
  • mysql日期加一天

    使用函数 date add 日期 interval 1 day 即可 select DATE ADD 39 2022 02 24 09 03 36 39 INTERVAL 1 DAY select DATE ADD 39 2022 02 2
  • Debian安装mysql

    Debian 10系统中默认使用了MariaDB xff0c 在APT的软件源中并没有mysql 所以 xff0c Debian 10 如果要安装mysql xff0c 需要下载安装Mysql APT Repository xff0c 更新
  • mysql设置忽略大小写

    在连接数据库的时候发现库里有表的名字只是大小写不一样 xff0c 但就是连不上 xff0c 我用的是mysql5 7 8 默认没有开启忽略大小写 xff0c 这里记录一下 1 查看数据库大小写配置 show variables like 3
  • Linux(debian)常用代理设置

    不管实在开发还是在日常使用中 xff0c 梯子是必不可少的工具 xff0c 但是在linux系统中 xff0c 有时候操作起来不是那么方便 xff0c 于是在此做个笔记 0x01 环境变量设置 设置代理 xff1b echo 39 expo
  • linux(Debian11)安装后安装无线网卡等驱动

    在工作和生活中 xff0c 我们经常会用到linux系统 xff0c debian作为一个老牌的程序员常用发行版 xff0c 自然成为我们的首选 下面记录一下 xff0c 安装无线网卡的过程 首先 xff0c 可以通过命令查看自己所需要的驱
  • 基于深度学习的知识追踪研究进展 Research Advances in the Knowledge Tracing Based on Deep Learning

    8 基于深度学习的知识追踪研究进展 Research Advances in the Knowledge Tracing Based on Deep Learning 摘要 xff1a 知识追踪是教育数据挖掘领域的一个重要研究方向 xff0
  • Tomcat控制台弱密码漏洞

    文章目录 一 漏洞介绍1 1 漏洞原理1 2 影响版本1 3 触发条件 二 环境搭建2 1 环境信息2 2 tomcat配置2 3 配置漏洞环境 三 攻击过程3 1 控制台弱密码3 2 冰蝎控制 四 漏洞修复 一 漏洞介绍 1 1 漏洞原理
  • linux(debian11)系统安装那些事儿--没有无线网需要安装无线网卡驱动双显卡等问题

    linux在日常的工作和生活中是经常用到的 xff0c 在安装的时候 xff0c 和windows不太一样 xff0c 有些驱动是需要我们自己手动安装的 xff0c 但是也并不麻烦 这里记录一下 xff0c 一种很简单的安装intel无线网
  • java线程编排CompletableFuture

    在开发中偶尔也会需要用到线程编排 比如查询商品数据 查询商品规格信息和商品图片耗时分别是1 2s和5s 如果是异步执行 那么就可以使用5s完成查询了 而不是6 2s 这里记录一下 CompletableFuture完成线程编排 import
  • dump数据库导表线上服务无响应

    有时候 有些场景下 我们需要拷贝线上的数据 进行本地测试 如果你用的是dbeaver工具操作数据库 在拷贝数据库的时候容易导致服务器没响应 看服务正常运行 但是前端访问就是没反应 服务器也没欠费 这是什么情况呢 就是mysql在进行dump
  • 多线程之如何设计线程数量

    创建多少线程合适 xff0c 要看多线程具体的应用场景 一般来说 xff0c 我们可以将程序分为 xff1a CPU密集型程序和I O密集型程序 xff0c 而针对于CPU密集型程序和I O密集型程序 xff0c 其计算最佳线程数的方法是不
  • P1825 [USACO11OPEN]Corn Maze S 题解

    这道题就是一道普通的搜索题 xff0c 非常非常普通 xff0c 普通的不能再普通那种 xff0c 和以前的bfs一样 xff0c 不过这个bfs要注意一个特判 xff0c 当弹出的那个元素的是大写字母的时候 xff0c 要窜梭到对应的大写
  • 向CentOS7虚拟机中复制文件报错error when getting information

    xff08 安装过程中 xff0c 所有询问 xff0c 都是 yes 或者按 Enter 同意默认路径 xff0c 其中的一个要注意的见下图 xff09
  • 程序设计思维与实践week12作业

    文章目录 A 必做题 1 HDU 1029描述输入输出样例想法代码 B 必做题 2 POJ 2251描述输入输出样例想法代码 C 必做题 3 HDU 1024描述东东每个学期都会去寝室接受扫楼的任务 xff0c 并清点每个寝室的人数 输入输