2011年北京大学计算机研究生机试真题(题解)

2023-11-16

九度OJ题目传送门:2011年北京大学计算机研究生机试真题


鸡兔同笼

题目描述

一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。

输入

第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,每行一个正整数a (a < 32768)

输出

输出包含n行,每行对应一个输入,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格分开
如果没有满足要求的答案,则输出两个0。

样例输入

2
3
20

样例输出

0 0
5 10

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int main()
{
    int n, a;
    scanf("%d", &n);
    while(n--){
        scanf("%d", &a);

        int t1 = a/2;
        int t2 = a/4;
        int maxn = 0, minn = 0;
        for(int i = 0; i <= t1; i++){
            for(int j = 0; j <= t2; j++){
                if(i*2+j*4==a){
                    if(minn==0)
                        minn = i+j;
                    if(i+j>maxn)
                        maxn = i+j;
                    if(i+j<minn)
                        minn = i+j;
                }
            }
        }

        printf("%d %d\n", minn, maxn);
    }
    return 0;
}

/**************************************************************
    Problem: 1155
    User: violet0908
    Language: C++
    Result: Accepted
    Time:330 ms
    Memory:1020 kb
****************************************************************/


放苹果

题目描述

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

输入

第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。

输出

对输入的每组数据M和N,用一行输出相应的K。

样例输入

1
7 3

样例输出

8

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int fun(int m, int n){
    if(n == 1)
        return 1;
    if(m==1 || m==0)
        return 1;
    else if(m < 0)
        return 0;
    else
        return fun(m, n-1)+fun(m-n, n);
}

int main()
{
    int t, m, n;
    scanf("%d", &t);
    while(t--){
        scanf("%d %d", &m, &n);
        printf("%d\n", fun(m, n));
    }
    return 0;
}

/**************************************************************
    Problem: 1160
    User: violet0908
    Language: C++
    Result: Accepted
    Time:0 ms
    Memory:1020 kb
****************************************************************/


谁是你的潜在朋友

题目描述

“臭味相投”——这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会并不太多。幸运的是,你意外得到了一份北大图书馆的图书借阅记录,于是你挑灯熬夜地编程,想从中发现潜在的朋友。

首先你对借阅记录进行了一番整理,把N个读者依次编号为1,2,…,N,把M本书依次编号为1,2,…,M。同时,按照“臭味相投”的原则,和你喜欢读同一本书的人,就是你的潜在朋友。你现在的任务是从这份借阅记录中计算出每个人有几个潜在朋友。

输入

每个案例第一行两个整数N,M,2 <= N ,M<= 200。接下来有N行,第i(i = 1,2,…,N)行每一行有一个数,表示读者i-1最喜欢的图书的编号P(1<=P<=M)

输出

每个案例包括N行,每行一个数,第i行的数表示读者i有几个潜在朋友。如果i和任何人都没有共同喜欢的书,则输出“BeiJu”(即悲剧,^ ^)

样例输入

4 5
2
3
2
1

样例输出

1
BeiJu
1
BeiJu

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int f[250];
int p[250];

int main()
{
    int n, m;
    while(scanf("%d %d", &n, &m)!=EOF){
        memset(f, 0, sizeof(f));

        for(int i = 0; i < n; i++){
            scanf("%d", &p[i]);
            f[p[i]]++;
        }

        for(int i = 0; i < n; i++){
            if(f[p[i]]==1){
                printf("BeiJu\n");
            }
            else if(f[p[i]]>1){
                printf("%d\n", f[p[i]]-1);
            }
        }
    }
    return 0;
}

/**************************************************************
    Problem: 1156
    User: violet0908
    Language: C++
    Result: Accepted
    Time:0 ms
    Memory:1024 kb
****************************************************************/


中位数

题目描述

中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数(或最中间两个数据的平均数).
给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数)

输入

该程序包含多组测试数据,每一组测试数据的第一行为N,代表该组测试数据包含的数据个数,1<=N<=10000.
接着N行为N个数据的输入,N=0时结束输入

输出

输出中位数,每一组测试数据输出一行

样例输入

4
10
30
20
40
3
40
30
50
4
1
2
3
4
0

样例输出

25
40
2

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int main()
{
    int n;
    int num[10005];
    while(scanf("%d", &n)!=EOF){
        if(n==0)
            break;

        for(int i = 0; i < n; i++)
            scanf("%d", &num[i]);

        sort(num, num+n);
        int ans;

        if(n%2==1){
            ans = num[n/2]; 
        }
        else{
            ans = (num[n/2-1]+num[n/2])/2;
        }
        printf("%d\n", ans);
    }
    return 0;
}

/**************************************************************
    Problem: 1157
    User: violet0908
    Language: C++
    Result: Accepted
    Time:20 ms
    Memory:1020 kb
****************************************************************/


买房子

题目描述

某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平米的房子,现在价格是200万,假设房子价格以每年百分之K增长,并且该程序员未来年薪不变,且不吃不喝,不用交税,每年所得N万全都积攒起来,问第几年能够买下这套房子(第一年房价200万,收入N万)

输入

有多行,每行两个整数N(10<=N<=50), K(1<=K<=20)

输出

针对每组数据,如果在第20年或者之前就能买下这套房子,则输出一个整数M,表示最早需要在第M年能买下,否则输出Impossible,输出需要换行

样例输入

50 10
40 10
40 8

样例输出

8
Impossible
10

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int main()
{
    double cnt, n, k, sum;
    while(scanf("%lf %lf", &n, &k)!=EOF){
        sum = n;
        cnt = 1;
        int fang = 200;

        int flag = 1;

        while(sum < fang){
            fang = (1+k/100)*fang;
            sum+=n;
            cnt++;
            if(cnt > 20){
                printf("Impossible\n");
                flag = 0;
                break;
            }
        }
        if(flag==1){
            printf("%.0lf\n", cnt);
        }
    }
    return 0;
}

/**************************************************************
    Problem: 1158
    User: violet0908
    Language: C++
    Result: Accepted
    Time:0 ms
    Memory:1020 kb
****************************************************************/


I Wanna Go Home

题目描述

The country is facing a terrible civil war—-cities in the country are divided into two parts supporting different leaders. As a merchant, Mr. M does not pay attention to politics but he actually knows the severe situation, and your task is to help him reach home as soon as possible.

“For the sake of safety,”, said Mr.M, “your route should contain at most 1 road which connects two cities of different camp.”

Would you please tell Mr. M at least how long will it take to reach his sweet home?

输入

The input contains multiple test cases.

The first line of each case is an integer N (2<=N<=600), representing the number of cities in the country.

The second line contains one integer M (0<=M<=10000), which is the number of roads.

The following M lines are the information of the roads. Each line contains three integers A, B and T, which means the road between city A and city B will cost time T. T is in the range of [1,500].

Next part contains N integers, which are either 1 or 2. The i-th integer shows the supporting leader of city i.

To simplify the problem, we assume that Mr. M starts from city 1 and his target is city 2. City 1 always supports leader 1 while city 2 is at the same side of leader 2.

Note that all roads are bidirectional and there is at most 1 road between two cities.

Input is ended with a case of N=0.

输出

For each test case, output one integer representing the minimum time to reach home.

If it is impossible to reach home according to Mr. M’s demands, output -1 instead.

样例输入

2
1
1 2 100
1 2
3
3
1 2 100
1 3 40
2 3 50
1 2 1
5
5
3 1 200
5 3 150
2 5 160
4 3 170
4 2 170
1 2 2 2 1
0

样例输出

100
90
540

思路:刚开始真想不出来,考虑的很复杂,最后参考了网上的题解后恍然大悟,对于不是同一个阵营的路换成单向的就简单了,同一个阵营的路还是双向路

#include<cstdio>
#include<cstring>
#include<algorithm>
#define INF 0xffffff
#define MAXN 605 
using namespace std;

int mp[MAXN][MAXN], dis[MAXN], team[MAXN];
bool vis[MAXN];

void dijkstra(int s, int n){
    memset(vis, false, sizeof(vis));

    for(int i = 1; i <= n; i++)
        dis[i] = mp[s][i];

    vis[s] = true;  
    dis[s] = 0;

    for(int i = 1; i < n; i++){
        int min = INF, pos;
        for(int j = 1; j <= n; j++){
            if(!vis[j] && dis[j] < min){
                min = dis[j];
                pos = j;
            }
        }   

        if(min == INF)
            break;

        vis[pos] = true;
        for(int j = 1; j <= n; j++){
            if(!vis[j] && dis[pos]+mp[pos][j] < dis[j]){
                dis[j] = dis[pos] + mp[pos][j];
            }
        }
    }
    if(dis[2] < INF)
        printf("%d\n", dis[2]);
    else
        printf("-1\n");
}

int main()
{
    int n, m;
    while(scanf("%d", &n)!=EOF){
        if(n == 0)
            break;

        scanf("%d", &m);

        for(int i = 0; i < MAXN; i++)
            for(int j = 0; j < MAXN; j++)
                mp[i][j] = INF;

        for(int i = 0; i < m; i++){
            int x, y, t;
            scanf("%d %d %d", &x, &y, &t);
            mp[x][y] = mp[y][x] = t;
        }

        for(int i = 1; i <= n; i++)
            scanf("%d", &team[i]);

        for(int i = 1; i<=n; i++){
            for(int j = i+1; j <= n; j++){
                if(team[i]==team[j])          //如果是同一个阵营,就不做操作 
                    continue;
                else if(team[i]==1 && team[j]==2)   //如果不是同一个阵营,就简历单向边 
                    mp[j][i] = INF;
                else if(team[i]==2 && team[j]==1)
                    mp[i][j] = INF;
            }
        }

        dijkstra(1, n); 
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2011年北京大学计算机研究生机试真题(题解) 的相关文章

  • 用VS Code搞Qt6:编译源代码与基本配置

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • chatgpt赋能python:怎么让Python执行完不关闭的SEO

    怎么让Python执行完不关闭的SEO 作为一名有十年Python编程经验的工程师 我深知Python在SEO技术中的重要性 然而 很多人可能不知道如何让Python执行完任务后不关闭 这将会影响我们的SEO效果 因此 在这篇文章中 我将向
  • c++中std::condition_variable最全用法归纳

    前言 建议阅读以下文章前需先对建立 std thread 多线程与std mutex 锁有一定程度的熟悉 std thread最全用法归纳 std mutex最全用法归纳 概括 使用 std condition variable 的 wai
  • Windows磁盘管理

    0x01 磁盘管理概述 磁盘管理是一项计算机使用时的常规任务 它是以一组磁盘管理应用程序的形式提供给用户的 他们位于计算机管理控制台中 它包括查错程序和磁盘碎片整理程序以及磁盘整理程序 来源百度百科 本文主要介绍的内容为磁盘整理程序中的分区
  • 【计算机网络】数据通信的基础知识

    通信系统的一般模型 数据通信系统的组成部分 源点 信源 产生数据 如从键盘输入 产生数字比特流 发送器 对数字比特流进行编码 如调制器 信道 是信号传输的通道 可能是一条简易的传输线路 也可能是一个复杂的网络 接收器 设备的功能与发送设备相
  • 人工智能之深度学习-初始环境搭建(安装Anaconda3和TensorFlow2步骤详解)

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475 前言 本篇文章
  • 【CCPC-2019】【江西省赛】【霖行】J-Worker

    CCPC 2019 江西省赛 霖行 J Worker 题目 Avin meets a rich customer today He will earn 1 million dollars if he can solve a hard pro
  • chatgpt赋能python:Python中如何写π

    Python中如何写 在Python中 写 Pi 即圆周率 可能是一个小小的挑战 但是 这个问题的答案相对比较简单 在本文中 我们将介绍如何在Python中计算 以及如何使用Python的数学库 math库 介绍 是一个十分重要的数学常数
  • 关于api-ms-win-crt-runtime

    关于api ms win crt runtime 1 1 0 dll缺失的解决方案 问题原因 有时 我们在打开文件程序的时候经常出现一些关于以下的错误 无法启动此程序因为计算机中丢失api ms win crt runtime 1 1 0
  • 2011年北京大学计算机研究生机试真题(题解)

    九度OJ题目传送门 2011年北京大学计算机研究生机试真题 鸡兔同笼 题目描述 一个笼子里面关了鸡和兔子 鸡有2只脚 兔子有4只脚 没有例外 已经知道了笼子里面脚的总数a 问笼子里面至少有多少只动物 至多有多少只动物 输入 第1行是测试数据
  • python拼接两个或者多个视频文件

    拼接不同分辨率的视频文件 import os import linecache 读取指定路径下的所有文件并放入到列表中 root workspace videos codec videos codec evp test h264 file
  • 设计模式之命令模式

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 2022第十三届蓝桥杯国赛真题javaB组

    文章目录 试题A 重合次数 试题B 数数 试题C 左移右移 试题D 窗口 试题E 迷宫 试题F 小球称重 试题G 背包与魔法 试题H 修路 试题I 围栏 试题J 好数之和 试题A 重合次数 本题总分 5 分 问题描述 在同一天中 从上午6
  • 《数据结构与算法》期末考试

    数据结构与算法 期末考试 判断题 单选题 填空题 函数题 主观题 判断题 已知一棵二叉树的先序遍历结果是ABC 则CAB不可能是中序遍历结果 T 所谓 循环队列 是指用单向循环链表或者循环数组表示的队列 F 只有当局部最优跟全局最优解一致的
  • chatgpt赋能python:如何用Python实现抢购?

    如何用Python实现抢购 Python是一种灵活多样的编程语言 可以用它来完成各种任务 其中之一就是抢购 在电商大促销的节日 抢购商品通常需要竞争非常激烈 但是使用Python编写抢购脚本可以让您获得更高的成功率 以下是一些建议 通过Py
  • chatgpt赋能python:用Python对图片进行分类

    用Python对图片进行分类 在如今的数字时代 图片分类是一个越来越常见的任务 特别是在搜索引擎优化中 图片分类可以让搜索引擎更容易地找到特定类型的图片 并在相关的搜索中以更高的排名显示它们 在本文中 我们将介绍如何使用Python来分类图
  • chatgpt赋能python:如何使用Python进行SEO优化

    如何使用Python进行SEO优化 在数字化时代 SEO已经成为一个广泛使用且需求不断增加的领域 虽然有很多工具和技术可以用于SEO 但Python是其中之一 Python是一种现代编程语言 通常用于处理大数据集 自动化任务 Web开发等特
  • chatgpt赋能python:Python打包发布完整指南:从基础知识到实践操作

    Python打包发布完整指南 从基础知识到实践操作 作为一名有着十年python编程经验的工程师 我清楚地知道打包发布Python应用程序是非常重要的 它能帮助我们方便地分享和分发程序 并且能够让其他人通过使用我们的程序来提高自己的工作效率
  • 马斯克没继续的工作,我帮他继续下去

    还记得当初自己为什么选择计算机 埃隆 马斯克的第一份工作是在加拿大开始的 17岁时 他来到加拿大 但他的寻亲不遇 为了生存 他不得不打各种零工 包括在农场中种蔬菜和打扫粮仓 以及在木材厂锅炉房烧锅炉 后来 他在加拿大读大学时 开始在彼得银行
  • 在一个线程池中,通常无法直接访问和检查单个线程的状态,因为线程池是由多个线程组成的,并且线程的执行情况可能会动态变化

    在一个线程池中 通常无法直接访问和检查单个线程的状态 因为线程池是由多个线程组成的 并且线程的执行情况可能会动态变化 然而 你可以通过一些方法来间接地查看线程是否在运行 一种常见的方法是为线程池中的每个线程设置一个标志或状态变量 用于表示线

随机推荐

  • Springmvc拦截器三个方法的执行时机

    一 拦截器三个方法分别是 1 1 preHandle 预处理回调方法 实现处理器的预处理 如登录检查 第三个参数为响应的处理器 如具体的Controller实现 返回值 true表示继续流程 如调用下一个拦截器或处理器 false表示流程中
  • 微信小程序与应用服务的关系和“代码安全“

    今天给客户回答了下小程序项目的代码安全问题 他担心源代码提交以及发布系统后被第三方知晓源代码 导致代码泄露 虽然作为程序员来说 这个问题不用考虑 但是非技术人员似懂非懂 所以我还是做了一个解释 一般做微信小程序开发 需要知道微信小程序只是纯
  • 记录PaddleOcr的使用2 -- GPU

    项目场景 之前使用了cpu 但是效率感人 所以想尝试一下GPU的版本 安装环境 windows下使用的 别问 问就是没有有GPU的服务器 1 python 3 7 如果是linux建议3 8 2 pip 版本 20 2 2或更高版本 64
  • LALR(1)语法自动分析生成器Mathew

    首次写博客 文采不好大家不要见笑额 简介 Mathew 马修 马修名字源于 魔力女管家 里的星神马修 马修是一个LALR 1 型活动板房式的语法自动分析生成器 马修继承了Lemon 也许大家对LEX和YACC比较熟悉 这两个工具配合使用可以
  • 记录Chrome截屏整个页面的命令

    F12 右键检查 进入开发者工具 调出命令 MAC command shift P Window ctrl shift P 输入命令 capture full size screenshot
  • C/C++如何输入包含空格的字符串

    对于C 字符串的输入我们看一下下面这段代码 string s 定义空字符串 cin gt gt s 输入字符串 cout lt lt s 打印 但我们会发现如果我们输入了还有空格的字符串 s里读入的字符串遇到空格 回车 tab都会结束 比如
  • 目前 AIGC 工具到底能帮我们做什么?

    最近直播超级多 预约保你有收获 今天腾讯发布了混元大模型 大模型赛道越来越内卷了 今天咱们来聊聊目前的 AIGC 工具能帮助我们做什么 AIGC 的本质是由 AI 来生产内容 通过自然语言交互的方式 让 AIGC 工具输出内容 AIGC 工
  • 20-文件下载及读取漏洞

    WEB 漏洞 文件操作之文件下载读取全解 思维导图 1 文件被解析 则是文件解析漏洞 2 显示源代码 则是文件读取漏洞 3 提示文件下载 则是文件下载漏洞 文件下载漏洞 利用条件 1 存在读文件的函数和操作 2 读取文件的路径用户可控且未校
  • Android 保存资源图片到相册最新写法适用于Android10.0及以上

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 一 首先在AndroidManifest xml中加入权限
  • APFS 文件系统探究

    本文的创作初衷是因为我发现从底层详解 APFS 的资料很少 所以自己来进行了一些探究和整理 一点说明 如果你在看 APFS 的文档或者其他内容 不要把高层级的分区理解成 Windows 中的分区 因为 APFS 里卷 Volume 才是显示
  • OUT指令时,就进入了I/O端口读写周期

    1 译码电路的输入信号 每当CPU执行IN或者OUT指令时 就进入了I O端口读写周期 此时首先是端口地址有效 然后是I O读写控制信号 IOR和 IOW有效 把对端口地址译码而产生的译码信号同 IOR和 IOW结合起来一同控制对I O端口
  • 聊聊FFT

    关于FFT 全称为快速傅里叶变换 目的是把时域的信号转变为频域的信号 具体的科学解释及计算方程组可以去查百度百科 不过小编不建议这么做 因为查了也看不懂的 先看一张都能看懂的图 这是某种食物的配方表 每种配方包含了多少比例标注的很清楚 对于
  • 计算机网络教程_第二章物理层_整理与复习

    计算机网络教程 第一章 概述 第二章 物理层 第三章 数据链路层 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 计算机网络教程 1 物理层的作用及主要任务 2 数据传输的方式 并行 串行 异步 同步 P40 3
  • python 设置下载源,全局设置

    推荐使用豆瓣的 个人感觉最好用 当然 你如果喜欢其它的 也可以设置 pip config set golbal index url https pypi douban com simple 设置成功 windows 提示的配置文件在 ini
  • Spyder上使用tensorflow训练完成时出现SystemExit异常

    使用spyder tensorflow实现迁移学习训练inception v3网络 训练完成后提示 SystemExit home zhijuan anaconda3 lib site packages python3 6 site pac
  • 深度学习 图像分割综述

    文章目录 前言 语义分割 实例分割 技术路线 掩膜建议分类法 先检测再分割法 标记像素后聚类法 密集滑动窗口法 参考 前言 图像分割在计算机视觉中是个重要的任务 在地理信息系统 医学影像 自动驾驶 机器人等领域都有着很重要的应用技术支持作用
  • TensorFlow框架做实时人脸识别小项目(二)

    在第一部分中 分析了整个小项目的体系 重点讨论了用于人脸检测对齐的mtcnn网络的实现原理 并利用笔记本电脑自带的摄像头进行了测试 今天在这里要讨论的重点是人脸识别中的核心部分 facenet网络 facenet是Google开源的人脸识别
  • 从CPU cache一致性的角度看Linux spinlock的不可伸缩性(non-scalable)

    凌晨一点半的深圳雨夜 豪雨当夜惊起有人赏 笑叹落花无声空飘零 喜欢这种豪雨 让人兴奋 惊起作文以呜呼之感叹 引用上一篇文章 优化多核CPU的TCP新建连接性能 重排spinlock https blog csdn net dog250 ar
  • 图片<img>、链接<a>等去除referer标记

    1 img 标签 img src src
  • 2011年北京大学计算机研究生机试真题(题解)

    九度OJ题目传送门 2011年北京大学计算机研究生机试真题 鸡兔同笼 题目描述 一个笼子里面关了鸡和兔子 鸡有2只脚 兔子有4只脚 没有例外 已经知道了笼子里面脚的总数a 问笼子里面至少有多少只动物 至多有多少只动物 输入 第1行是测试数据