• 广联达笔试题


    第一题

    题目描述:
    在课堂上,老师与同学们玩了这样一个游戏: 老师先在黑板上写下了一个数x,之后让n-1个同学依次选择如下两种操作之一进行操作:
    1.在黑板上写下5x,即写下x的五倍这个数:
    2.当且仅当x是偶数时可以在黑板上写下x/2这个数字。

    每个同学操作之后,黑板上新写下的数变成下一个同学的数X。
    不过同学们写数字时都是比较乱的。下课之后,你从隔壁班走过来看见黑板上一共有n个数字不知道它们被写下来的顺序,只知道老师写的数字是x。你的任务是找到一个合法的被写下的数字顺序。如果有多个答案符合要求,请输出字典序最小的那个序列,

    两个序列[a1,a2…an] [b1,b2…bn]的字典序定义为:从左到右找到第一个位置,满足ai≠bi;,若ai

    输入描述
    第一行两个正整数n,x,表示黑板上的数字个数和老师写的数字
    第二行n个正整数a1,a2…an,表示黑板上这n个数。老师写的数字也在这里面
    1

    输出描述
    输出一行n个数,表示字典序最小的合法的序列。

    样例输人

    5 16
    8 20 16 10 4
    
    • 1
    • 2

    样例输出

    16 8 4 20 10
    
    • 1
    #include
    #include
    #include
    using namespace std;
    #define LL long long
    
    int main() {
    	LL n, start;
    	cin >> n >> start;
    	unordered_multiset<LL>NumsSet;
    	int temp = 0;
    
    	for (int i = 0; i < n; i++) {
    		cin >> temp;
    		NumsSet.insert(temp);
    	}
    	NumsSet.erase(start);
    	cout << start << " ";
    	int next = 0;
    	while (!NumsSet.empty()) {
    		if ((start % 2 == 0) && NumsSet.count(start / 2)) {			//偶数
    			start = start / 2;
    			NumsSet.erase(start);
    			cout << start << " ";
    		}
    		else {
    			start = 5 * start;
    			NumsSet.erase(start);
    			cout << start << " ";
    		}
    	}
    	//cout << "hello world" << endl;
    	//system("pause");
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    小明在梦中困在一个迷宫里了。迷宫太难了,小明发动特殊能力让迷宫变得简单起来。迷官变成了一张个节点的有根树(根为1号节点)的结构,只能在一个节点往其儿子节点走,而当没有导向其他节点的路径存在时,即该节点没有儿子节点时,便走出了迷宫。这样一来,小明只要沿着任意可以走的路径行进就肯定可以到达出口了! 出发前为了做好周密准备,小明想知道处于这个迷宫的各个位置能走到哪些出口

    输入描述
    第一行3个整数分别为n,m和q,表示迷宫节点数量迷宫路径数量询问数量
    第二行m个整数u1 u2…um
    第三行m个整数V1 V2…Nme
    其中ui vi代表第i条有向路径从节点ui通往节点Vi,即节点ui有一个儿子节点vi。保证形成一棵以1号节点为根的有根树。
    第四行9个整数a1 a2 …an。表示第i次询问为: 若处于ai节点,可能到达多少个不同的出口?
    注意,若一个节点没有导向其他节点的路径存在时,即没有儿子节点时,这个节点则为一个出口
    i

    输出描述
    输出一行g个整数,分别表示每次询问的答案

    样例输入

    3 2 3
    1 1
    2 3
    1 2 3
    
    • 1
    • 2
    • 3
    • 4

    样例输出

    2 1 1
    
    • 1

    提示
    节点1可以走向节点2和节点3,并不是出口
    节点2和节点3都没有导向其他节点的路径了,均为出口。
    若处于节点1,可以走向节点2或节点3,有2种可能的出口。
    若处于节点2,只有节点2本身一个出口;节点3同理。

    #include 
    #include 
    using namespace std;
    #define LL long long
    
    int dfsWaysCount(vector<vector<int> >& Nodes, int a) {
    	//int res = 1;
    	if (Nodes[a].empty()) return 1;
    	int res = 0;
    	for (int i = 0; i < Nodes[a].size(); ++i) {
    		res += dfsWaysCount(Nodes, Nodes[a][i]);
    	}
    	return res;
    }
    
    int main()
    {
    	int n, m, q;
    	cin >> n >> m >> q;
    	vector<vector<int> > Nodes(n + 1, vector<int>());
    	vector<int> father;
    	vector<int> son;
    	for (int i = 0; i < m; ++i) {
    		int u;
    		cin >> u;
    		father.push_back(u);
    	}
    	for (int i = 0; i < m; ++i) {
    		int v;
    		cin >> v;
    		Nodes[father[i]].push_back(v);
    	}
    	
    	for (int i = 0; i < q; ++i) {
    		int a;
    		cin >> a;
    		cout << dfsWaysCount(Nodes, a);
    	}
    
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
  • 相关阅读:
    Qt开发 入门
    数据挖掘实验(一)数据规范化【最小-最大规范化、零-均值规范化、小数定标规范化】
    Dataspell快捷键更改为eclipse后,在.py文件中shift+回车自动换行冲突问题解决
    【C++】类和对象(上),三种类对象模型,全局变量和静态变量在.h中的问题,类的内存对齐等等..快来看看
    java基于springboot的考研辅导资讯交流网站
    前端 js面试题(二)
    【论文阅读】多模态NeRF:Cross-Spectral Neural Radiance Fields
    sql 执行插入多条语句中 n个insert 与 一个insert+多个values 性能上有和区别 -- chatGPT
    聊聊微服务架构思想
    【MySQL】MySQL的安装,登录,配置和相关命令
  • 原文地址:https://blog.csdn.net/Ge_yangwen/article/details/132864116