2020年复旦大学夏令营机试题及代码(VS2019 C++)

article/2025/4/28 12:58:51

注:代码是本菜鸡自己个儿写的,没有找到参考答案,欢迎各位大佬批评指正.

题目如下图所示(图片来源网上):
在这里插入图片描述

第1题

该题主要考察拓扑排序.其实该算法有通用模板,但我写的时候没有意识到使用,代码不是很规范.

#define _CRT_SECURE_NO_WARNINGS#include <iostream>
#include <vector>
#include <queue>using namespace std;
const int maxn = 110;vector<int> after[maxn];
vector<int> path;
queue<int> q;
int n;
bool vis[maxn] = { false }, pre[maxn] = { false };int main() {scanf("%d", &n);char c;int a, b;scanf("%c", &c);while (c ==',') {scanf(" [%d, %d]", &a, &b);after[b].push_back(a);pre[a] = true;//有前置结点scanf("%c", &c);}//找到入度为0的结点(开始节点)for (int i = 0; i < n; i++) {if (pre[i] == false) {q.push(i);}}//BFS遍历int node;while (q.size()>0) {//如果队列不为空node = q.front();q.pop();if (vis[node] == false) {path.push_back(node);vis[node] = true;for (int i = 0; i < after[node].size(); i++) {if (vis[after[node][i]] == false) {q.push(after[node][i]);}}}	}for (int i = 0; i < path.size(); i++) {printf("%d", path[i]);if (i == path.size() - 1) printf("\n");else printf(", ");}return 0;
}
测试用例1
In:
4, [1, 0], [2, 0], [3, 1], [3, 2]
Out:
0, 1, 2, 3测试用例2
In:
2, [0, 1]
Out:
1, 0测试用例3
In:
4, [0, 1], [2, 1], [3, 1]
Out:
1, 0, 2, 3测试用例4
In:
5, [1, 0], [2, 0], [3, 0], [4, 2], [4, 3]
Out:
0, 1, 2, 3, 4测试用例5
In:
6, [3, 0], [3, 1], [3, 2], [4, 3], [5, 3]
Out:
0, 1, 2, 3, 4, 5

第2题

  • 该题主要考察动态规划.
  • 对于题目给出的测试用例,输入没有给出矩阵的行数和列数,而是直接输入矩阵.由于所给矩阵并不一定是方阵(即行数和列数相等),我这个菜鸡不会判断它的输入何时结束,只能偷偷加了两个输入条件,即先输入矩阵的行数和列数,再输入这个矩阵.

刚开始时我写不出来动态规划解法,只能暴力求解:

#define _CRT_SECURE_NO_WARNINGS#include <iostream>
#include <cstring>
#include <algorithm>
//#include <string>using namespace std;
const int maxn = 110;int G[maxn][maxn], res[maxn][maxn];
int m, n;int main() {scanf("%d %d", &m, &n);//输入矩阵的行数和列数int len = 0;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {scanf("%d", &G[i][j]);//res[i][j] = G[i][j];if (G[i][j] == 1) len = 1;}}if (len == 0) {printf("0\n");return 0;}int maxL = len;//复杂度较高while (len <= min(m, n)&&maxL==len) {for (int i = 0; i < m - len; i++) {for (int j = 0; j < n - len; j++) {if (G[i][j] != 0) {if (G[i][j] <= G[i + 1][j] && G[i][j] <= G[i][j + 1] && G[i][j] <= G[i + 1][j + 1]) {G[i][j]++;maxL = max(maxL, G[i][j]);}}}}len++;}printf("%d\n", maxL);return 0;
}

后来参考了一下网上类似题目的代码,遂将该题的代码更改如下:

#define _CRT_SECURE_NO_WARNINGS#include <iostream>
#include <cstring>
#include <algorithm>
//#include <string>using namespace std;
const int maxn = 110;int G[maxn][maxn], res[maxn][maxn];
int m, n;int main() {scanf("%d %d", &m, &n);//输入矩阵的行数和列数int len = 0;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {scanf("%d", &G[i][j]);//res[i][j] = G[i][j];if (G[i][j] == 1) len = 1;}}if (len == 0) {printf("0\n");return 0;}int maxL = len;//动态规划for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {if (G[i][j] > 0) {G[i][j] = min(min(G[i - 1][j], G[i][j - 1]),G[i-1][j-1]);G[i][j]++;maxL = max(maxL, G[i][j]);}}}printf("%d\n", maxL);return 0;
}
测试用例1
In:
4 5
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
Out:
2测试用例2
In:
2 2
0 0
0 0
Out:
0测试用例3
In:
2 3
1 1 1
1 1 1
Out:
2测试用例4
In:
3 3
1 1 1
1 1 1
1 1 1
Out:
3

第3题

emm,这个题俺不知道复杂度较小的代码咋写,只能暴力求解了:

#define _CRT_SECURE_NO_WARNINGS#include <iostream>
#include <vector>
#include <algorithm>using namespace std;
const int maxn = 110;struct Node
{int v, val;Node(int _v, int _val) :v(_v), val(_val) {}
};int n, m, father[maxn];
bool vis[maxn], black[maxn] = { false };
vector<Node> G[maxn];//邻接表(无向)
int ans;void DFS(int v,int len) {vis[v] = true;for (int i = 0; i < G[v].size(); i++) {int u = G[v][i].v;if (vis[u] == false) {if (black[u] == true) {ans+=(len + G[v][i].val);}DFS(u, len + G[v][i].val);}}
}int main() {scanf("%d %d", &n, &m);int val;for (int i = 1; i < n; i++) {scanf("%d", &father[i]);}for (int i = 1; i < n; i++) {scanf("%d", &val);G[i].push_back(Node(father[i], val));G[father[i]].push_back(Node(i,val));}int t, c;for (int i = 0; i < m; i++) {scanf("%d %d", &t, &c);if (t == 1) black[c] = true;else if (t == 2) {fill(vis, vis + maxn, false);ans = 0;DFS(c,0);printf("%d\n", ans);}}return 0;
}
测试用例1
In:
4 5
0 1 2
2 1 3
2 2
1 3
2 2
2 3
2 1
Out:
0
3
0
4测试用例2
In:
7 8
0 0 0 1 1 2
2 1 3 1 6 3
2 5
1 4
1 5
2 5
1 6
1 0
2 0
2 1
Out:
0
7
15
15

http://chatgpt.dhexx.cn/article/c9R8ZKvG.shtml

相关文章

复旦大学研究生机试(2019)

1. 计算机学院 今年的题目可以说是挺难的&#xff0c;第一题虽然像是送分题&#xff0c;实际上也不是很简单。第二题第三题是动态规划问题&#xff0c;而且复旦据说会卡大数&#xff0c;今年150人考生据说只有一个AC&#xff0c;大部分人只做出第一题&#xff0c;个别零分。 …

【20保研】2019年复旦大学工程与应用技术研究院全国优秀大学生夏令营通知

点击文末的阅读原文或者公众号界面左下角的保研夏令营或者公众号回复“夏令营”是计算机/软件等专业的所有保研夏令营信息集合&#xff0c;会一直更新的。 为了促进我国高校优秀大学生之间的交流、加强学生对复旦大学工研院的了解、特别是吸引优秀学生继续深造&#xff0c;探索…

复旦大学计算机专业硕士平均工资,在复旦大学当教授“月薪”是多少?这个工资条,让网友非常羡慕!...

文章原创&#xff0c;版权归本作者所有&#xff0c;欢迎个人转发分享 随着中国的高等教育发展的重视&#xff0c;很多的高校也是不负众望&#xff0c;不仅在国内知名度很高&#xff0c;在国外也享有盛誉的。 在中国知名度最高的大学就是清华、北大、复旦等高校&#xff0c;是受…

复旦计院、工研院2019机试真题及答案详解

计院 A 相隔天数 输入一个 yyyymmdd 格式的时间&#xff0c;如 20190318&#xff0c;计算与 20190205 相差的天数&#xff0c; 取绝对值&#xff0c;所有输入在 19000101 和 21000101 之间。 样例输入&#xff1a;20190208 输出&#xff1a;3 #include<iostream>us…

复旦计院、工研院2018机试真题及答案详解

计院 A 求众数 众数就是一个序列中出现次数最多的数字。 如果不唯一&#xff0c;则输出小的那个值。 给定第一个代表有几个数字。 1<n<10^5 每个数字在 int 范围内样例&#xff1a; 输入&#xff0c; &#xff08;第一个代表有几个数字&#xff09;8 10 3 8 8 …

2019年复旦大学机试题

机试&#xff1a; 一、计算机学院&#xff1a; 1、 算法笔记上有类似题&#xff0c;且time与time2都是输入。 而本体time是输入&#xff0c;time2是题目给的。 设置time与time2&#xff0c;为计算方便设定让time恒小于time2。 方法&#xff1a;从time&#xff08;较早的日期…

2019 复旦大学工研院上机题-计算通讯代价

题目&#xff1a; 给出一个树&#xff0c;计算每个节点到其他节点的通讯代价的总和&#xff0c;假如树为 1————2————3 1 则结点 1&#xff0c;2&#xff0c;3 通讯代价分别为&#xff1a;3&#xff0c;2&#xff0c;3 例&#xff1a; 输入&#xff1a; 3 1 2 2 3 输出&…

更正:复旦大学工研院计算机学硕不是第一年招生

首先对大家说一声抱歉&#xff01; 昨天弄错了复旦大学工研院的情况。 据复旦大学工研院的在读同学描述&#xff0c;实际上复旦大学工研院计算机学硕是第二年招生&#xff0c;专硕是第一年招生。 专硕的招生目录&#xff1a; 考试内容&#xff1a;①101思想政治理论;②204英语二…

研究生院校推荐——复旦大学工研院

概述 过去的一年几乎都在准备考研&#xff0c;现在差不多勉强上岸&#xff0c;写一点经验和教训。 我最初的目标院校是上海交大电院计算机&#xff0c;最后上岸是复旦大学工研院计算机。 今年的上交计算机专硕分数线是325&#xff0c;复旦工研院学硕分数线是340&#xff0c;题…

入营人数线性增长,录取人数保持稳定,复旦工研院有点抢手

1、院校介绍 复旦大学工程与应用技术研究院是复旦大学发挥文理医综合优势&#xff0c;聚焦解决国家重大需求的工程与应用研发&#xff0c;发展具有复旦特色工程学科的一项重要举措。其下设有智能机器人研究院、生物医学工程技术研究所和超越照明研究所三个研究机构。近几年来&…

链路聚合实验

目录 1 链路聚合配置实验 1.1 实验内容 1.2 实验原理 1.3 关键命令 1.4 配置过程 2 链路聚合与VLAN配置实验 2.1 实验内容 2.2 实验原理 2.3 配置过程 3 链路聚合与生成树配置实验 3.1 实验内容 3.2 实验原理 3.3 配置过程 4 链路聚合与RSPAN配置实验 4.1 实验…

链路聚合配置

链路聚合 链路聚合介绍 链路聚合模式 链路聚合配置 链路聚合介绍 链路聚合&#xff1a;将多个以太网链路捆绑为一条逻辑的以太网链路 作用&#xff1a; 1.提高带宽 2.节省IP地址 链路聚合组 二层聚合组&#xff1a;随着二层聚合端口的创建自动生成的&#xff0c;只包含二…

为什么会有链路聚合这种技术?

这里写目录标题 前言链路聚合是什么&#xff1f;二层交换机链路聚合三层交换机链路聚合总结 前言 在企业网络中&#xff0c;所有设备的流量在转发到其他网络前都会汇聚到核心层&#xff0c;再由核心区设备转发到其他网络&#xff0c;或者转发到外网。因此&#xff0c;在核心层…

Linux链路聚合

CSDN话题挑战赛第2期https://marketing.csdn.net/p/7b6697fd9dd3795a268d1a6f2fe75012 参赛话题&#xff1a;学习笔记https://activity.csdn.net/creatActivity?id10213 一、概念 指的是将多个物理端口汇聚在一起&#xff0c;形成一个逻辑端口&#xff0c;以实现出、入流量吞…

链路聚合技术及其配置

** 链路聚合技术 &#xff08;链路捆绑&#xff09; ** 链路聚合技术背景 交换机与交换机之间如果流量很大的时候会出现带宽不足的问题。&#xff08;路由器与路由器&#xff09;&#xff08;交换机与服务器之间&#xff09;------------链路聚合技术 &#xff08;链路捆绑&…

eNSP 配置链路聚合

目录 实验目的&#xff1a; 实验拓扑图如下&#xff1a; 实验命令&#xff1a; S1配置 S2配置 S3配置 pc端 &#xff08;所有pc配置IP注意不要相同&#xff09; 实现链路聚合需要满足以下条件&#xff1a; 1. 物理链路的带宽相等&#xff1b; 2. 物理链路连接的设备…

二层链路聚合

目录 一.二层交换机间的链路聚合 二.项目实例 sw配置命令 运行结果 总结&#xff1a; 引言&#xff1a;今天和一个从事网络维护的朋友聊天聊到了二层交换机的链路聚合&#xff0c;感觉自己都快忘记了&#xff0c;于是决定温习一下二层链路聚合的知识。 一.二层交换机间的…

华为交换机 链路聚合

前言 随着网络规模不断扩大&#xff0c;用户对骨干链路的带宽和可靠性提出了越来越高的要求。在传统技术中&#xff0c;常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽&#xff0c;但这种方案需要付出高额的费用&#xff0c;而且不够灵活。 采用链路聚合…

十四、链路聚合

链路聚合 随着网络规模不断扩大&#xff0c;用户对骨干链路的带宽和可靠性提出了越来越高的要求。在传统技术中&#xff0c;常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽&#xff0c;但这种方案需要付出高额的费用&#xff0c;而且不够灵活。 采用链路…

「网工必备」超详细链路聚合原理及分析

大家好&#xff0c;今天带大家了解一下以太网链路聚合&#xff0c; 从它的背景作用到应用范围&#xff0c;再到配置实验&#xff0c;一步搞定&#xff0c;记得看到最后&#xff01; 链路聚合技术的背景和作用 随着网络规模的不断扩大&#xff0c;人们对骨干链路的带宽和可靠性…