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

article/2025/4/28 13:59:35

计院

A 相隔天数

输入一个 yyyymmdd 格式的时间,如 20190318,计算与 20190205 相差的天数,

取绝对值,所有输入在 19000101 和 21000101 之间。

样例输入:20190208

输出:3

#include<iostream>using namespace std;int month_day[13][2] {{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};int Isrunyear(int year){if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) return 1;return 0;
}
int main(){int y1,y2 = 19001001;cin >> y1;if(y1 < y2) swap(y1,y2);int year1 = y1 /10000,month1 = (y1/100) % 100,day1 = y1 % 100;int year2 = y2 /10000,month2 = (y2/100) % 100,day2 = y2 % 100;int num = 0;while(year1 > year2 || month1 > month2 || day1 > day2){num++;day2++;if(day2 == month_day[month2][Isrunyear(year2)] + 1) {  //这里没考虑好二维矩阵下标问题。全局变量越界访问等于访问0day2 = 1;month2++;}if(month2 == 13) {month2 = 1;   //这里=写成==year2++;}}cout << num;return 0;
}
// 出现问题耐心调试!

备注写了些写的过程中的错误。一道并不难的题写了很久。。。细节问题要注意。继续加油吧~ 

 B 最大连续子序列

//10.24
#include<iostream>
#include<vector>
using namespace std;vector<int> a,dp;
int main(){int n;cin >> n;a.push_back(0);for(int i = 1;i <= n;i++) {int x;cin >> x;a.push_back(x);}int max1 = 0;for(int i = 0;i <= n;i++)dp.push_back(0);for(int i = 1;i <= n;i++){int sum = dp[i - 1] + a[i];if(sum < 0 ) dp[i] = 0;else {dp[i] = sum;max1 = max(max1,sum);}} cout << max1;return 0;
}

DP问题

状态定义:dp[i]表示以第i个数结尾的序列集合中的最大值

状态划分:以sum = dp[i - 1] + a[i]是否大于0划分(因为本题答案一定为正数,所以可以这么划分)

                

C 二叉树形态

#include<iostream>
#include<vector>
using namespace std;const int N = 21;
long long dp[N];
int main(){int n ;cin >> n;dp[0] = 1;dp[1] = 1;for(int i = 2;i <= n;i++){long long sum = 0;for(int j = 0;j <= i - 1;j++)sum += dp[j] * dp[i - j - 1];dp[i] = sum;}cout << dp[n];return 0;
}

状态定义:dp[i]表示节点数为i的二叉树形态有几个

状态划分:根据根节点的左右子树有0 、 1、 2...i-1个来划分

都是很简单的dp问题,可是自己就是想不出来。。。吐了。。。

工研院

A 九键输入

//11.58
#include<iostream>
#include<vector>
#include<map>using namespace std;
char input[100];
const int N = 21;
map<int,char> g;int main(){int num = 0;for(int i = 2;i <= 7;i++){int k = i;for(int j = 1;j <= 3;j++, k = k* 10 + i){g.insert({k,'a' + num});num++;}}g.insert({0,' '});g.insert({7777,' S'});g.insert({8,' T'});g.insert({88,' U'});g.insert({888,' V'});g.insert({9,' W'});g.insert({99,' X'});g.insert({999,' Y'});g.insert({9999,' Z'});int length = 0;while(cin >> input[length++]); //字符串输入for(int i = 0;i < length - 1;i++){if(input[i] == '-') continue;if(input[i] == '0') {cout << ' ';continue;}char output = input[i];int num = output - '0';int j = 1;while(input[i + 1] == output) i++,j++;if(j == 1) cout << g[num];if(j == 2) cout << g[num * 10 + num];if(j == 3) cout << g[num * 100 + num * 10 + num];}return 0;
}

其实可以用二维数组存的,会更加方便一些。

B 服务器维护

假设有编号从1-N的服务器,首先给出服务器个数,再给出一组服务器状态。
然后给出一次数字,表示修改状态次数,接下来输入为i,j,x,意思是使用x修改从i到j的服务器。
最后输出所有服务器状态
例:
输入:
5
1 2 2 3 1
2
1 2 5
2 5 -1
输出:
6 6 1 2 0

#include<iostream>
using namespace std;int main(){int n;cin >> n;int a[n + 2],b[n + 2]; //0,n+1可能会访问到,所以多加2a[0] = b[0] = 0;for(int i = 1;i <= n;i++) cin >> a[i];for(int i = 1;i <= n;i++) b[i] = a[i] - a[i - 1];int m;cin >> m;while(m--){int l,r,x;cin >> l >> r >> x;b[l] += x;b[r + 1] -= x;}for(int i = 1;i <= n;i++) {a[i] = a[i - 1] + b[i]; cout << a[i] << ' ';}return 0;
}


 

前缀和与差分

前缀和:可用来求数组a中第i到第j个数的和

                如何生成前缀和

//a为数组值,s为前缀和  注意为了之后运算方便,a、s都从下标1开始存。下标0定义为0。
s[0] = 0;
for(int i = 1;i <= n;i++)s[i] = s[i - 1] + a[i]

                如何求区间和

sum_ij = s[j] - s[i - 1]

差分——前缀和逆运算:可用来是数组的某一区间里的数加上同一个数值

设原数组为a1,a2...an,构造b数组使a数组为b数组的前缀和。即b数组为a数组的差分。

b1 = a1

b2 = a2 - a1

b3 = a3 - a2

...

bn = an - a(n-1)

则 ai = b1 + b2 + ... + bi

若bi + c,则原数组ai ai+1 ... an都加上c。 因为ai = b1 + b2 + .. + bi + c,ai + 1 = b1 + b2 + ...+bi + c + bi+1以此类推

同理若bj -  c,则原数组aj ,aj+1 ... an都会减去c。

故若想让ai到aj这个的数都加上c,只需bi + c,bj+1 - c。

C 计算通讯代价

给定一个无向图,保证是一棵树,定义两个结点 ab 之间的通信代价为 ab 路径

上的边的数目,节点 a 的通信代价为 a 到其他所有节点的通信代价之和。在一

行中输出所有结点的通信代价。

样例输入:

4

1 2

2 3

2 4

输出:

5 3 5 5

#include<iostream>
#include<cstring>
using namespace std;int g[10][10];void Dig(int i,int n){bool flag[n + 1];memset(flag,0,sizeof(flag));flag[i] = true;int m = n - 1;while(m--){int min1 = 0x3f3f3f3f,pos;for(int k = 1;k <= n;k++)if(g[i][k] < min1 && !flag[k]){ // 找到集合外最小值min1 = g[i][k];pos = k;}flag[pos] = true;for(int k = 1;k <= n;k++)if(g[i][k] > g[i][pos] + g[pos][k] && !flag[k])g[i][k] = g[i][pos] + g[pos][k];}
}int main(){int n;cin >> n;int m = n - 1;memset(g,0x3f,sizeof(g));while(m--){int x,y;cin >> x >> y;g[x][y] = 1;g[y][x] = 1;}for(int i = 1;i <= n;i++)Dig(i,n);int sum[n + 1];memset(sum,0,sizeof(sum));for(int i = 1;i <= n;i++)for(int j =1;j <= n;j++)if(g[i][j] != 0x3f3f3f3f) sum[i] +=g[i][j];for(int i = 1;i <= n;i++) cout << sum[i] << ' ';return 0;
}

 想了一个时间复杂度为n^3的算法。分别以树中的每个顶点为源点使用digstra算法求出该点到其他点的最短距离,然后再算出来每个点到其他店的距离总和。估计大数据的时候可能会超时。

感觉工研院的机试和计院还是不太一样,计院基本上每年都会考DP,工研院这三道题则完全没有DP。


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

相关文章

复旦计院、工研院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;人们对骨干链路的带宽和可靠性…

链路聚合的介绍以及配置

1、链路聚合技术的背景&#xff1a; 交换机与交换机之间如果流量很大的时候会出现带宽不足的问题。&#xff08;路由器与路由器&#xff09;、&#xff08;交换机与服务器之间&#xff09; 因为当我们在交换机与交换机增加线路时会出现环路&#xff0c;默认情况下CISCO启用了ST…

【博客426】单播 组播 广播

单播 && 组播 && 广播 单播(unicast) 是指封包在计算机网络的传输中&#xff0c;目的地址为单一目标的一种传输方式。 它是现今网络应用最为广泛&#xff0c;通常所使用的网络协议或服务大多采用单播传输&#xff0c;例如一切基于TCP的协议。下面来看看图1。…

组播广播+数据库操作

广播和组播 数据包在以太网物理介质上传播之前必须封装头部和尾部信息。封装后的数据包称为称为数据帧 ,数据帧中封装的信息决定了数据如何传输。 MAC OUI&#xff08;24bit&#xff09; 供应厂商提供&#xff08;24bit&#xff09; 单播详细&#xff1a; 在局域网中,所有主机…

组播数据包丢失故障排除指南

介绍 本文档的目的是帮助找出丢失组播数据包的原因并进行一些调整以尽量减少此类丢失。 组播数据包丢失的原因有多种。 UDP 协议本身牺牲了性能的可靠性&#xff0c;并且不保证数据报的传递。 因此&#xff0c;数据包在网络传输过程中可能会丢失。 即使数据包到达网络节点&…