南京大学机试试题合集

news2024/9/20 6:05:35

🍰🍰🍰hello宝子们,今天我们来练习南京大学的机试题目,这些题目的缺点就是太老了,都是18或19年的题,大家就练练手。加油!fighting!( •̀ ω •́ )✧

🍩1161 二叉树遍历

#include<bits/stdc++.h>
using namespace std;
string s;
int len;
typedef struct node{
	char data;
	struct node *lchild,*rchild;
}*bitree;

bitree create(bitree &t){
	if(len>=s.size()) return NULL;
	char data=s[len];
	len++;
	if(data!='#'){
		t=(bitree)malloc(sizeof(bitree));
		t->data=data;
		t->lchild=NULL;
		t->rchild=NULL;
		t->lchild=create(t->lchild);
		t->rchild=create(t->rchild);
	}
	return t;
}
void inorder(bitree &t){
	if(t!=NULL){
		inorder(t->lchild);
		cout<<t->data<<" ";
		inorder(t->rchild);
	}
}
int main(){
	while(cin>>s){
		len=0;
		bitree t;
		bitree tree=create(t);
		inorder(tree);
		cout<<endl;
	}
	return 0;
}

🍩1692 Distinct Subsequences🍦

//摘自N诺用户:csYfZhang
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define MAX 1005
#define MOD 1000000007
int main(){
    long long dp[MAX][MAX];//表示 T 前 i 字符串可以由 S 前 j 字符串组成的最多个数
    int n; 
	cin>>n;
    while(n--){
    	string s,t;
    	cin>>s>>t;
    	s=' '+s;
		t=' '+t;
    	int l1=s.size(),l2=t.size();
    	for(int i=1;i<l2;i++)
			for(int j=1;j<l1;j++) 
				dp[i][j]=0;
    	int lens=s.size(),lent=t.size();
		for(int i=0;i<lens;i++) dp[0][i]=1;
    	for(int i=1;i<lent;i++){
    		for(int j=i;j<lens;j++){
    			if(t[i]==s[j])
    				dp[i][j]=(dp[i-1][j-1]+dp[i][j-1])%MOD;//dp[i][j-1]类似于不选s[j]能凑成t[1...i]的个数,dp[i-1][j-1]则为选s[j]能凑成t[1...i]的个数
    			else dp[i][j]=dp[i][j-1];//当 S[j] != T[i] , dp[i][j] = dp[i][j-1](不想等,只能不选s[j])
    		}
    	}
    	cout<<dp[l2-1][l1-1]<<endl;
    }
	return 0;
}

🍩1690 Stepping Numbers🍦

//摘自N诺用户:Ashionial 
#include <bits/stdc++.h>
using namespace std;
const long long N = 3e8 + 10;
int main()
{
    vector<long long> num={10,12,21,23,32,34,43,45,54,56,65,67,76,78,87,89,98};
    int n=num.size();
    queue<long long> q;
    for(int i=0;i<n;i++) q.push(num[i]);
	//预处理,直接求出来所有满足的数
	while(!q.empty())
    {
        long long cur=q.front();
        q.pop();
        if(cur>=N) break;
        int end=cur%10;//最后一位数
        if(end>=1)
        {
            long long tmp=cur*10+end-1;
            num.push_back(tmp);
            q.push(tmp);
        }
        if(end<=8)
        {
            long long tmp=cur*10+end+1;
            num.push_back(tmp);
            q.push(tmp);
        }
    }
    long long T;
    cin>>T;
    while(T--)
    {
        long long l,r;
        cin>>l>>r;
        long long s=lower_bound(num.begin(),num.end(),l)-num.begin();//lower_bound找到区间第一个大于等于l的数的位置
        long long e=lower_bound(num.begin(),num.end(),r)-num.begin();
        cout<<e-s+(num[e]==r?1:0)<<endl;
    }
    return 0;
}

🍩1691 Nodes from the Root🍦

//摘自N诺用户:lianghl 
#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f

void solve(int n,int y,vector<vector<int>> edges){
    vector<vector<int>> g(n,vector<int>(n,-1));
    int r=-inf,l=inf;
    for(auto e:edges){
        int u=e[0],v=e[1],w=e[2];
        g[u][v]=w;
        r=max(r,w);
        l=min(l,w);
    }

    auto check=[&](int thr)->bool{
        int cnt=1;
        vector<int> q {0};
        vector<bool> vis(n);
        vis[0]=true;
        while(!q.empty()){
            vector<int> p(q);
            q.clear();
            for(auto x:p){
                for(int y=0;y<n;y++){
                    if (!vis[y]&&g[x][y]>=thr) {
                        cnt++;
                        vis[y]=true;
                        q.push_back(y);
                    }
                }
            }
        }
        return cnt<=y;
    };

    auto bisect=[&](int i,int j){
        while(i<=j){
            int mid=(i+j)/2;
            if(!check(mid)) i=mid+1;
            else j=mid-1;
        }
        return i;
    }; 
    cout<<bisect(l, r)<<endl;
}

int main() {
    int T; 
	cin>>T;
    while(T--){
        int n, y; 
		cin >> n >> y;
        vector<vector<int>> edges(n-1);
        for(int i = 0; i < n-1; i++) {
            int u, v, w;
            cin >> u >> v >> w;
            edges[i] = {u, v, w};
        }
        solve(n, y, edges);
    }
}

🍩1895 子序列

#include<bits/stdc++.h>
using namespace std;
int main(){
	string a,b;
	int n,ans=0;
	string res;
	cin>>a>>n;
	int lena=a.size(),lenb;
	int dp[2005][2005]={0};
	while(n--){
		for(int i=0;i<2005;i++)
			for(int j=0;j<2005;j++)
				dp[i][j]=0;
		cin>>b;
		lenb=b.size();
		for(int i=1;i<=lena;i++){
			for(int j=1;j<=lenb;j++){
				if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1;
				else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
			}
		}
		if(ans<dp[lena][lenb]){
			ans=dp[lena][lenb];
			res=b;
		}
	}
	cout<<res<<endl<<ans;
	return 0;
}

🍩1894 奶牛位置🍦

//摘自N诺用户:cccclr
//自己填的注释,有不懂的地方欢迎评论区留言
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int dp[N];//dp[i]记录到当前位置i需要花费的最少时间
int path[N];//path[i]记录从哪走到了i
int main(){
    memset(dp,0,sizeof(dp));
    memset(path,0,sizeof(path));
    int s,t;
    cin>>s>>t;
    vector<int> a;
    if(s>0){
    	dp[s-1]=1;//从s到s-1要走1步
    	path[s-1]=s;//从s走到了s-1
    }
    dp[s]=0;//从s到s不用走
	path[s]=-1;//-1表示到头了
    dp[s+1]=1;//从s到s+1要走1步
	path[s-1]=s;//从s走到了s-1
    for(int i=s+2;i<=t+1;i++){
    	int pos=i/2;
    	if(i%2==0){//可以从pos的位置经过一次*2到达
    		if(dp[pos]<dp[i-1]){//这里在对比从pos位置*2花费时间更少还是从前一个位置后移一位花费时间更少
    			dp[i]=dp[pos]+1;//通过一步*2从pos到达当前位置i
    			path[i]=pos;//从pos走到了i
    			while(dp[i-1]>dp[i]+1){//这是松弛的步骤:就是说,这种情况下从当前位置i到前边一个位置用时比之前记录的方法更短
    				dp[i-1]=dp[i]+1;
    				path[i-1]=i;//从i走到了i-1
    			}
    		}
    		else{//从前一个位置后移一位花费时间更少
    			dp[i]=dp[i-1]+1;
    			path[i]=i-1;//从i-1走到了i
    		}
    	}
    	else{//不能通过*2到达,那么当前位置只能通过从前一个位置向后走一步到达
    		dp[i]=dp[i-1]+1;//考虑从后一个位置向前走一步到达会报错
    		path[i]=i-1;//从i-1走到了i
    	}
    }
    cout<<dp[t]<<endl;//输出最少花费时间

    for(int i=t;path[i]!=-1;){//逆着回去找所有的路径
    	a.push_back(i);
    	i=path[i];
    }
    a.push_back(s);
    for(int i=a.size()-1;i>=0;i--){
    	cout<<a[i];
    	if(i>0) cout<<"->";
    }
	return 0;
}

创作不易,点个赞吧~感兴趣的宝子欢迎关注本专栏和我们一起学习机试内容哦~

宝子们学习辛苦啦,休息下,我们下部分再见!👋( •̀ ω •́ )✧ ~

大家还想看哪个学校的机试题目,评论区告诉我~~~

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

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

相关文章

geodatatool(地图资源工具)3.8

geodatatool&#xff08;地图资源工具&#xff09;3.8&#xff08;新&#xff09;修复更新&#xff0c;修复更新包括&#xff1a; 1.优化在线地图多线程下载及用户体验。 注意&#xff1a;在线地图下载与背景地图显示用的是同样的源&#xff0c;所以在线地图是否能下载&#x…

通过Jflash合并程序以 BOOT + APP 合并为例

打开【jflash】新建一个JFash工程 建好后界面如下 打开【File】下面的【Open data file…】 找到Boot程序所在位置 打开后界面如下&#xff0c;可以看到hex中的数据 点击【File】下面的【Merge data file…】 打开应用程序 查看APP地址区域是否有数据&#xff0c…

备战秋招60天算法挑战,Day32

题目链接&#xff1a; https://leetcode.cn/problems/house-robber-ii/ 视频题解&#xff1a; https://www.bilibili.com/video/BV1WRYKeKEQE/ LeetCode 213. 打家劫舍 II 题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。…

京东的AIGC革新之旅:通过JoyCoder实现研发提效 | 新程序员

【导读】从需求分析、设计编码到测试运维&#xff0c;AI已经逐步渗透到软件开发的各个环节&#xff0c;如何切实针对研发场景进行提效&#xff0c;是业内每个企业都在思考的问题。本文作者详细分析了AI在研发中的实际应用&#xff0c;并分享了JoyCoder与京东内部工具结合的实际…

一款可以替代Notepad++的免费高级文本编辑器

Kate 文本编辑器是一款跨平台的免费高级文本编辑器&#xff0c;具有丰富的功能和特性。它支持标签页、代码高亮、多文件查找、垂直/水平视图、侧边栏、颜色主题等特性&#xff0c;类似于Notepad。它以其多功能性和易用性广受好评。Kate 支持多文档界面&#xff08;MDI&#xff…

加密技术.

基本保密通信模型 密码学发展 古典密码学 主要特点&#xff1a;数据的安全基于算法的保密 经典的加密⽅法包括凯撒密码&#xff08;Caesar Cipher&#xff09;&#xff08;替代密码&#xff09;、维吉尼亚密码&#xff08;Vigenre Cipher&#xff09; 主要分类 替代密码&…

OCR技术视角:智能文档管理中的票据自动化识别与处理

在数字化转型的浪潮中&#xff0c;企业对于高效、自动化的文档管理需求日益增长。票据作为企业运营中不可或缺的部分&#xff0c;其识别与管理的智能化成为了提升工作效率的关键。本文将深入探讨智能文档系统中票据识别功能的原理、技术优势以及在不同行业中的应用实践&#xf…

【报错已解决】`Solving environment: failed`

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言&#xff1a;一、问题描述&#xff1a;1.1 报错示例&#xff1a;1.2 报错分析&#xff1a;1.3 解决思路&#xff…

智能指针,QT,C++语言的关键字总结

八、C中关键字总结 1> C中一共有63个关键字&#xff0c;如上图所示&#xff0c;其中标红的为c语言中的关键字&#xff0c;有32个 2> 数据类型相关的关键字 bool、true、false&#xff1a;对于bool类型数据的相关处理&#xff0c;值为true和false char、wchar_t:char是…

《Exemplar Free Class Agnostic Counting》CVPR2022

概述 摘要&#xff1a; 这篇论文提出了一种新颖的“无范例类别无关计数”&#xff08;Exemplar Free Class Agnostic Counting&#xff09;方法&#xff0c;旨在测试时对新类别的对象进行计数&#xff0c;而无需访问该类别的标记训练数据。以往的类别无关计数方法无法在完全自…

【刷题笔记】打家劫舍问题

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 题目一 题目链接&#xff1a;打家劫舍I 思路 小偷每到一初&#xff0c;都可以选择对这个位置偷还是不偷&#xff0c;所以&#xff0c;这次我们需要定义两个表 小Tips&#xff1a;针对这种情况&#xff0c;一般…

OpenGL/GLUT实践:水面模拟——从单振源到 Gerstner Wave(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub&#xff1a;A-UESTCer-s-Code 文章目录 1 实现效果1 简单水面模拟——单振源1.1 水面高度函数1.2 水面建模1.3 openGL 渲染(1) renderSense(2) 其他 1.4 实现效果 2 添加鼠标控制3 添加纹理4 多个振源组合5 Gerstner Wave 模型5.1 原理5.2 具体实现5.2.1 全局变量…

pytest 常用的辅助函数和工具函数

pytest 常用的辅助函数和工具函数示例 # File: my_module.pydef fetch_data():return process datadef process_data():data fetch_data()return data.upper() import logging import sys import pytest#01-------------------------------pytest.fixture,sample_data 在测试…

Android 下的 XML 文件(概念理解、存储位置理解)

一、XML 1、XML 概述 XML&#xff08;Extensible Markup Language&#xff0c;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言 类似于 HTML&#xff0c;但旨在传输和存储数据&#xff0c;而不是显示数据&#xff0c;且基本语法都是标签 2、XML 的特点 &am…

【2024数模国赛赛题思路公开】国赛B题思路丨附可运行代码丨无偿自提

2024年国赛B题解题思路 问题 1: 抽样检测方案设计 【题目分析】 分析&#xff1a; 目标是设计一个高效的抽样检测方案&#xff0c;在尽量少的样本数量下&#xff0c;确保在高信度水平下做出正确的接受或拒收决策。需要处理两个不同的信度要求&#xff0c;这对样本量的计算提…

解决matplotlib中文乱码最简单方案

解决matplotlib中文乱码问题方案众多&#xff0c;我认为如下方案是最简单的一个。 1、从电脑中搜索simhei字体&#xff0c;如下示意图是mac检索结果&#xff0c;或者直接搜索simhei.ttf下载字体 拷贝到指定路径&#xff1a;/path/to/mex/simhei.ttf 2、matplotlib 加载字体 …

【Git】本地仓库操作

Part1 基础概念 git作用&#xff1a;管理代码版本&#xff0c;记录&#xff0c;切换&#xff0c;合并代码 git仓库&#xff1a;记录文件状态内容和历史记录的地方&#xff08;.git文件夹&#xff09; git的三个区域&#xff1a;1&#xff09;工作区&#xff1a;实际开发时的文…

针对STM32串口输出乱码错误问题

STM32在通过printf打印到串口时出现的文字乱码问题 使用printf文件中main.c文件&#xff0c;检查文件的编码方式是否正确&#xff0c;如下图所示&#xff0c;选择Chinese GD2编码方式&#xff1a;Edit--》Configuration 检查串口输出还是乱码错误 可以检测所建文件夹中main.c…

大道至简,大厂官网基本都走简洁化设计路线。

「大道至简」是一种设计理念&#xff0c;强调设计应该追求简洁、直观、易用&#xff0c;而不是过多的修饰和繁琐的细节。 对于大厂的官网来说&#xff0c;简洁化设计路线的选择可能有以下几个原因&#xff1a; 1. 更好的用户体验&#xff1a; 简洁的设计可以让用户更容易地理…

【Python报错已解决】`EOFError: Ran out of input`

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言&#xff1a;一、问题描述&#xff1a;1.1 报错示例&#xff1a;1.2 报错分析&#xff1a;1.3 解决思路&#xff…