北京理工大学复试上机--2020

PS: 2020的是夏令营试题

1、题目:给你一个 m*n 大小的矩阵,每个点有 0,1,2 三种取值;0 代表障碍物,1代表白纸,2 代表墨滴。每一秒墨滴可以向其上下左右扩散,将四周的白纸染色,被染色之后的白纸可以继续向四周扩散,以此类推。问经过几秒,矩阵中所有的白纸都被染色。

如果可以,则输出扩散时间;

如果不可以,则输出FALSE。

输入: m n 的大小以及矩阵每个点的值

输出: 扩散时间 或 FALSE

例如:

3 3

0 1 0

1 2 1

0 1 0

输出: 1

3 3

0 1 0

1 2 1

0 1 1

输出: 2

2 3

1 0 0

0 0 2

输出: False

#include <iostream>
#include <queue>
using namespace std;
int main() {
    int m, n;
    while (cin >> m >> n) {
        int arr[m][n];
        int temp = 0;
        queue<int> qx, qy;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                cin >> arr[i][j];
                if(arr[i][j] == 2) {
                    qx.push(i);
                    qy.push(j);
                }
                if(arr[i][j] == 1) temp++;
            }
        }
        int sec = 0;
        while(!qx.empty() && temp) {
            int size = qx.size();
            int dir[5] = {1, 0, -1, 0, 1};
            while(size--) {
                int x = qx.front();
                int y = qy.front();
                qx.pop();
                qy.pop();
                for(int i = 0; i < 4; i++) {
                    int dx = x + dir[i];
                    int dy = y + dir[i + 1];
                    if(dx < 0 || dx >= m || dy < 0 || dy >= n || arr[dx][dy] != 1) continue;
                    else {
                        arr[dx][dy] = 2;
                        temp--;
                        qx.push(dx);
                        qy.push(dy);
                    }
                }
            }
            sec++;
        }
        if (temp) cout << "False" << endl;
        else cout << sec << endl;
    }
    return 0;
}

2、输入三个字符串,问第三个字符串能否由前两个字符串多次重复组合形成。如果能,则输出前两个字符串各自的使用次数;如果不能,则输出 FALSE。

输入:三个字符串

输出:前两个字符串各自的次数 或 FALSE

输入: aa bb bbaaaabbaa

输出: 3 2

输入: ab ba abbaaabaab

输出: FALSE

(注意特殊用例: aa aab aabaa  故递归)

#include <iostream>
#include <queue>
using namespace std;

queue<string> st;

bool sub(string s1, string s, int n) {
    return s.substr(n, s1.length()) == s1;
}

bool issub(string s1, string s2, string s, int p, int rem) {
    if(p == s.length() && rem == 0) return true;
    if(sub(s1, s, p) && sub(s2, s, p)) st.push(s.substr(p, rem));
    if(sub(s1, s, p)) {
        rem -= s1.length();
        p += s1.length();
        issub(s1, s2, s, p, rem);
    }
    if(sub(s2, st.front(), p)) {
        st.pop();
        rem -= s2.length();
        p += s2.length();
        issub(s1, s2, s, p, rem);
    }
    return true;
}

int main() {
    string s1, s2, s;
    while(cin >> s1 >> s2 >> s) {
        int l = s.length();
        cout << issub(s1, s2, s, 0, l);
    }
    return 0;
}

PS: 暂时是更新完了,综合面试也是一个大头,都抓紧吧,尽量不手生,多看 多练  加油!!!!  Fighting!!!  (别忘了前面未完善的!!)

原文地址:https://www.cnblogs.com/ache/p/12630070.html

时间: 2024-10-05 17:09:45

北京理工大学复试上机--2020的相关文章

北京理工大学复试上机--2009

1.请输入字符串,最多输入4 个字符串,要求后输入的字符串排在前面,例如 输入:EricZ 输出:1=EricZ 输入:David 输出:1=David 2=EricZ 输入:Peter 输出:1=Peter 2=David 3=EricZ 输入:Alan 输出:1=Alan 2=Peter 3=David 4=EricZ 输入:Jane 输出:1=Jane 2=Alan 3=Peter 4=David 2.把上述最后结果保存到Name.txt中; #include <iostream> #i

北京理工大学复试上机--2010

1.输入一串整数,输入命令排序! 输入 a t 在这串整数后面添加整数 t, 输入 c\m\n 有 n 替换 m, 输入 d t 删除 t, 输入 s 排序. #include <iostream> #include <vector> #include <cstring> #include <algorithm> using namespace std; int tonum(string s, int l) { int n = 1, sum = 0; for

北京理工大学复试上机--2013

1.求两个数的最大公约数 示例: 输入:24 18 输出:6 #include <iostream> #include <math.h> using namespace std; int main() { int a, b, i, j, m; while (cin >> a >> b) { m = min(a, b); j = 0; for (i = 1; i <= m; i++) { if (a % i == 0 && b % i =

北京理工大学复试上机--2016

1.输入学生信息,姓名成绩(成绩的数目不一定)输出每个学生的学号和平均成绩,以及不及格课程数超过2的学生,按不及格课程数从大到小排好序输出. input: stu1 60 70 80 30 stu2 10 20 30 40 50 stu3 10 20 30 40 50 60 30 stu4 60 80 100 stu5 50 40 30 60 70 # output: stu1 60 stu2 30 stu3 34.2857 stu4 80 stu5 50 不及格课程数超过2的学生有: stu3

北京理工大学复试上机--2019

1.字符串解析将字符串看成不同的字符切片,切片不可重复,按字母序输出所有切片(每个切片一行) 输入: aaabbcaaabaa 输出: aa aaa b bb c #include <iostream> #include <set> using namespace std; int main() { string s; while (cin >> s) { set<string> ss; string str; int i; for (i = 0; i &l

HDU 1234 (浙大计算机研究生复试上机考试-2005年) 开门人和关门人 (水)

开门人和关门人 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 11133    Accepted Submission(s): 5667 Problem Description 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签 到.签离记录,请根据记录找出当天开门和关门的人. Input 测试输入的第一

hdu 4416 水题 浙大计算机研究生复试上机考试-2005年 可是发现自己写代码有问题

Spring3与Hibernate4整合时出现了nested exception is java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider. hibernate3的时候,用spring来控制sessionfactory用的可以是org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean,因为用的是hibernate4所以照猫画

北京航空航天大学计算机系考研复试上机真题及答案---2014

第一题,阶乘数. 输入一个正整数,输出时,先输出这个数本身,跟着一个逗号,再输出这个数的各位数字的阶乘和,等号,阶乘和的计算结果,并判断阶乘和是否等于原数,如果相等输出Yes,否则输出No.题目说明输入的正整数以及其各位阶乘和都不会超出int型的表示范围. 输入样例1: 145 输出样例1: 145,1!+4!+5!=145 Yes 输入样例2: 1400 输出样例2: 1400,1!+4!+0!+0!=27 No 第二题,五子棋. 输入一个19*19的矩阵,只包含数字0.1.2,表示两人下五子

浙大计算机研究生复试上机考试-2010年 zoj问题

ZOJ问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2984 Accepted Submission(s): 906 Problem Description 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下: 1. zoj能AC: 2. 若字符串形式为xzojx,则也能AC,其中x可以是N