Loading... ## 第一题: ### 题目描述 <div class="tip inlineBlock info"> 数列求值 给定数列1, 1, 1, 3, 5, 9, 17, …,从第4 项开始,每项都是前3 项的和。求 第20190324 项的最后4 位数字。 </div> ### 题解: ```cpp #include <bits/stdc++.h> using namespace std; typedef long long LL; const LL N = 5e7; LL arr[N]; int main() { arr[1] = 1, arr[2] = 1, arr[3] = 1; for(LL i = 4; i <= 20190324; i++){ //我们只要后四位有效数字,所以取模10000即可 LL t = ((arr[i - 1] % 10000 + arr[i - 2] % 10000) % 10000 + arr[i - 3] % 10000) % 10000; arr[i] = t; } cout << arr[20190324] << endl; return 0; } ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1453** ### 答案: **4659** ## 第二题: ### 题目描述: <div class="tip inlineBlock info"> 迷宫 下图给出了一个迷宫的平面图,其中标记为1 的为障碍,标记为0 的为可 以通行的地方。 010000 000100 001001 110000 迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。 对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫, 一共10 步。其中D、U、L、R 分别表示向下、向上、向左、向右走。 对于下面这个更复杂的迷宫(30 行50 列),请找出一种通过迷宫的方式, 其使用的步数最少,在步数最少的前提下,请找出字典序最小的一个作为答案。 请注意在字典序中D<L<R<U。 </div> ### 题解: ```cpp ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1455** ### 答案: ## 第三题: ### 题目描述: <div class="tip inlineBlock info"> 完全二叉树的权值 给定一棵包含N 个节点的完全二叉树,树上每个节点都有一个权值,按从 上到下、从左到右的顺序依次是A1, A2, AN,如下图所示: 现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点 权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。 注:根的深度是1。 </div> ### 题解: ```cpp #include<bits/stdc++.h> using namespace std; typedef long long LL; int main(){ LL res = 0, n, k = 0, s = 0, ss = -5e10, m = 0; cin >> n; for(LL i = 1; i <= n; i++){ int tmp; cin >> tmp; s += tmp; m ++; if(m == pow(2, k)){ if(s > ss) { ss = s; res = k; } k ++; s = 0; m = 0; } } cout << res + 1 << endl; return 0; } ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1457** ## 第四题: ### 题目描述: <div class="tip inlineBlock info"> 组队 作为篮球队教练,你需要从以下名单中选出1 号位至5 号位各一名球员,组成球队的首发阵容。 每位球员担任1号位至5号位时的评分如下表所示。请你计算首发阵容1号位至5号位的评分之和最大可能是多少? ```markdown 1 97 90 0 0 0 2 92 85 96 0 0 3 0 0 0 0 93 4 0 0 0 80 86 5 89 83 97 0 0 6 82 86 0 0 0 7 0 0 0 87 90 8 0 97 96 0 0 9 0 0 89 0 0 10 95 99 0 0 0 11 0 0 96 97 0 12 0 0 0 93 98 13 94 91 0 0 0 14 0 83 87 0 0 15 0 0 98 97 98 16 0 0 0 93 86 17 98 83 99 98 81 18 93 87 92 96 98 19 0 0 0 89 92 20 0 99 96 95 81 ``` </div> ### 题解: ```cpp #include<bits/stdc++.h> using namespace std; typedef long long LL; int main(){ cout << 98 + 99 + 98 + 97 + 98 << endl; return 0; } ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1462** ### 答案: **490** ## 第五题: ### 题目描述: <div class="tip inlineBlock info"> 年号字串 小明用字母A 对应数字1,B 对应2,以此类推,用Z 对应26。对于27以上的数字 小明用两位或更长位的字符串来对应,例如AA 对应27,AB 对应28,AZ 对应52,LQ 对应329。 请问2019 对应的字符串是什么? </div> ### 题解: ```cpp #include<bits/stdc++.h> using namespace std; typedef long long LL; int main(){ int n = 2019; string s1 = ""; while(n){ int t = n % 26; s1 += char('A' + t - 1); n /= 26; } reverse(s1.begin(), s1.end()); cout << s1 << endl; return 0; } ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1463** ### 答案: QYB --- ## 第六题: ### 题目描述: <div class="tip inlineBlock info"> 数的分解 把2019分解成3个各不相同的正整数之和,并且要求每个正整数都不包含数字2和4,一共有多少种不同的分解方法? 注意交换3个整数的顺序被视为同一种方法,例如1000+1001+18 和1001+1000+18 被视为同一种。 </div> ### 题解: ```cpp #include<bits/stdc++.h> using namespace std; bool check(int n){ while(n){ int tmp = n % 10; if(tmp == 2 || tmp == 4) return false; n /= 10; } return true; } int main(){ int res = 0; for(int i = 1; i <= 2019; i++){ for(int j = i + 1; i + j <= 2019; j++){ int k = 2019 - i - j; if(k > j && check(i) && check(j) && check(k)) res ++; } } cout << res << endl; return 0; } ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1464** ## 第七题: ### 题目描述: <div class="tip inlineBlock info"> 特别数的和 小明对数位中含有2、0、1、9 的数字很感兴趣(不包括前导0) 在1到40中这样的数包括1、2、9、10 至32、39 和40,共28 个,他们的和是574。 请问,在1到n 中,所有这样的数的和是多少? </div> ### 题解: ```cpp #include<bits/stdc++.h> using namespace std; bool check(int n){ while(n){ int tmp = n % 10; if(tmp == 2 || tmp == 0 || tmp == 1 || tmp == 9) return true; n /= 10; } return false; } int main(){ int m, res = 0; cin >> m; for(int i = 1; i <= m; i++){ if(check(i)) res += i; } cout << res << endl; return 0; } ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1465** ## 第八题: ### 题目描述: <div class="tip inlineBlock info"> 等差数列 数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中N 个整数。 现在给出这N 个整数,小明想知道包含这N 个整数的最短的等差数列有几项? </div> ### 题解: ```cpp #include<bits/stdc++.h> using namespace std; typedef long long LL; vector<LL>arr; int main(){ LL n; cin >> n; for(LL i = 0; i < n; i++){ LL tmp; cin >> tmp; arr.push_back(tmp); } sort(arr.begin(), arr.end()); LL d = 0; for(LL i = 0; i < arr.size()-1; i++){ d = __gcd(d, arr[i+1] - arr[i]); } if(arr[0] != arr[n-1]){ cout << (arr[n-1] - arr[0]) / d + 1; }else{ cout << n << endl; } return 0; } ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1466** ## 第九题: ### 题目描述: <div class="tip inlineBlock info"> 后缀表达式 给定N 个加号、M 个减号以及N + M + 1 个整数A1,A2,...,AN+M+1 小明想知道在所有由这N 个加号、M 个减号以及N + M +1 个整数凑出的合法的后缀表达式中,结果最大的是哪一个? 请你输出这个最大的结果。 例如使用1 2 3 + -,则“2 3 + 1 -” 这个后缀表达式结果是4,是最大的。 </div> ### 题解: ```cpp ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1467** ## 第十题: ### 题目描述: <div class="tip inlineBlock info"> 灵能传输 ![](https://www.bdmcom.cn/usr/uploads/2022/04/2335479482.png) </div> ### 题解: ```cpp ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1468** 最后修改:2022 年 04 月 07 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果文章有用,请随意打赏。