总结

一共5道题,都是原题,2道英文题是算法课的作业题,以为不会考,结果考了。勉强做了4个,最后一个忘了转移方程了,想写个暴力的解法,结果没写完。本来以为会出个回溯题的,但是一个也没出,白练了一堆。整体就是dp+贪心+dp+模拟+hash,都挺简单的。

最长公共子序列

两个签到题之一

题目描述

一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad" ,顺次选1,3,5个字符就构成子串" cad" ,现给定两个字符串,求它们的最长共公子串。

输入

第一行两个字符串用空格分开。两个串的长度均小于2000 。

输出

最长子串的长度。

样例输入

abccd aecd

样例输出

3

代码

#include<bits/stdc++.h>
using namespace std;
const int N=2010;
char a[N],b[N];
int dp[N][N];
int main(){cin>>a+1>>b+1;int l1=strlen(a+1);int l2=strlen(b+1);for(int i=1;i<=l1;i++){for(int j=1;j<=l2;j++){if(a[i]==b[j]) dp[i][j]=dp[i-1][j-1]+1;else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);}}cout<<dp[l1][l2];return 0;
}

跳跃游戏2

另一个签到题,简单的贪心,这两题做了就能及格了

题目描述

给定一个非负整数数组,假定你的初始位置为数组第一个下标。数组中的每个元素代表你在那个位置能够跳跃的最大长度。你的目标是到达最后一个下标,并且使用最少的跳跃次数。例如:A = [2,3,1,1,4],到达最后一个下标的最少跳跃次数为 2。(先跳跃11步,从下标0到1,然后跳跃3步,到达最后一个下标。一共两次)

输入

第一行输入一个正整数n(1≤n≤100),接下来的一行,输入n个整数,表示数组A。

输出

最后输出最少的跳跃次数。

样例输入

5
3 1 1 1 1

样例输出

2

代码

#include<bits/stdc++.h>
using namespace std;
const int N=110;
int a[N];
int main(){int n;cin>>n;for(int i=0;i<n;i++){cin>>a[i];}int ans=0,m=0,end=0;for(int i=0;i<n-1;i++){if(m>=i){m=max(m,i+a[i]);if(i==end){end=m;ans++;}}}cout<<ans;return 0;
}

Rock-Paper-Scissors Tournament

其中一个英文题,还行,只是个模拟

题目描述

Rock-Paper-Scissors is game for two players, A and B, who each choose, independently of the other, one of rock, paper, or scissors. A player chosing paper wins over a player chosing rock; a player chosing scissors wins over a player chosing paper; a player chosing rock wins over a player chosing scissors. A player chosing the same thing as the other player neither wins nor loses.
A tournament has been organized in which each of n players plays k rock-scissors-paper games with each of the other players - kn(n-1)/2 games in total. Your job is to compute the win average for each player, defined as w / (w + l) where w is the number of games won, and l is the number of games lost, by the player.

输入

Input consists of several test cases. The first line of input for each case contains 1 <= n <= 100 1 <= k <= 100 as defined above. For each game, a line follows containing p1, m1, p2, m2. 1 <= p1 <= n and 1 <= p2 <= n are distinct integers identifying two players; m1 and m2 are their respective moves (“rock”, “scissors”, or “paper”). A line containing 0 follows the last test case.

输出

Output one line each for player 1, player 2, and so on, through player n, giving the player’s win average rounded to three decimal places. If the win average is undefined, output “-”. Output an empty line between cases.

样例输入

2 4
1 rock 2 paper
1 scissors 2 paper
1 rock 2 rock
2 rock 1 scissors
2 1
1 rock 2 paper
0

样例输出

0.333
0.6670.000
1.000

代码

#include<bits/stdc++.h>
using namespace std;
const int N=110;
int win[N],loss[N];
int main(){int n,k;while(cin>>n){if(n==0) break;cin>>k;memset(win,0,sizeof(win));memset(loss,0,sizeof(loss));int t1,t2;string s1,s2;int m=k*n*(n-1)/2;for(int i=0;i<m;i++){cin>>t1>>s1>>t2>>s2;if(s1[0]=='r'&&s2[0]=='s'||s1[0]=='s'&&s2[0]=='p'||s1[0]=='p'&&s2[0]=='r'){win[t1]++;loss[t2]++;}else if(s1[0]=='s'&&s2[0]=='r'||s1[0]=='p'&&s2[0]=='s'||s1[0]=='r'&&s2[0]=='p'){win[t2]++;loss[t1]++;}}for(int i=1;i<=n;i++){if(win[i]==0&&loss[i]==0) cout<<"-\n";else{double t=1.0*win[i]/double(win[i]+loss[i]);printf("%.3f\n",t);}}cout<<endl;}return 0;
}

Brackets Sequence

没做出来的一个题,整个年级就一个人做出来了(汗),其实就是个区间dp,就是打印比较繁琐

题目描述

Let us define a regular brackets sequence in the following way:

  1. Empty sequence is a regular sequence.
  2. If S is a regular sequence, then (S) and [S] are both regular sequences.
  3. If A and B are regular sequences, then AB is a regular sequence.

For example, all of the following sequences of characters are regular brackets sequences:

(), [], (()), ([]), ()[], ()[()]

And all of the following character sequences are not:

(, [, ), )(, ([)], ([(]

Some sequence of characters ‘(’, ‘)’, ‘[’, and ‘]’ is given. You are to find the shortest possible regular brackets sequence, that contains the given character sequence as a subsequence. Here, a string a1 a2 … an is called a subsequence of the string b1 b2 … bm, if there exist such indices 1 = i1 < i2 < … < in = m, that aj = bij for all 1 <= j< = n.

输入

The input file contains at most 100 brackets (characters ‘(’, ‘)’, ‘[’ and ‘]’) that are situated on a single line without any other characters among them.

输出

Write to the output file a single line that contains some regular brackets sequence that has the minimal possible length and contains the given sequence as a subsequence.

样例输入

([(]

样例输出

([(]

代码

// dp[i][j] 从i到j需要添加括号的个数
// dp[i][j]=dp[i+1][j-1] match(i,j)
// dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]) #include <bits/stdc++.h>
using namespace std;
const int MAXN = 256;
char br[MAXN];
int dp[MAXN][MAXN], pos[MAXN][MAXN];
int len;
void print_br(int i, int j)
{if (i > j)return;if (i == j){if (br[i] == '(' || br[j] == ')')printf("()");elseprintf("[]");}else if (pos[i][j] == -1){printf("%c", br[i]);print_br(i + 1, j - 1);printf("%c", br[j]);}else{print_br(i, pos[i][j]);print_br(pos[i][j] + 1, j);}
}
bool match(int i, int j)
{if (br[i] == '(' && br[j] == ')')return true;if (br[i] == '[' && br[j] == ']')return true;return false;
}
int main()
{int i, j, k, mid, t;while (gets(br) != NULL){memset(dp, 0, sizeof(dp));len = strlen(br);for (i = 0; i < len; i++){dp[i][i] = 1;}for (k = 1; k < len; k++){for (i = 0; i + k < len; i++){j = i + k;dp[i][j] = 0x7fffffff;if (match(i, j)){dp[i][j] = dp[i + 1][j - 1];pos[i][j] = -1;}for (k = i; k < j; k++){if (dp[i][j] > (t = dp[i][k] + dp[k + 1][j])){dp[i][j] = t;pos[i][j] = k;}}}}print_br(0, len - 1);printf("\n");}
}

sort2

数据比之前大了很多到了1e6,不过数组能正常存,用sort肯定就寄了,写个类似计数排序就可以

题目描述

给你n个整数,请按从大到小的顺序输出其中前m大的数。

输入

每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个都处于区间[-500000,500000]的整数,整数可能会重复出现。

输出

对每组测试数据按从大到小的顺序输出前m大的数。

样例输入

10 5
1 2 3 4 5 6 7 7 8 9

样例输出

9 8 7 7 6

代码

#include<bits/stdc++.h>
using namespace std;
const int N=1000000+10;
int a[N];
int main(){int n,m,t;cin>>n>>m;for(int i=0;i<n;i++){cin>>t;a[t+500000]++;}int ans=0;for(int i=1000000;i>=0;i--){if(ans==m) break;while(a[i]!=0){cout<<i-500000<<' ';ans++;a[i]--;if(ans==m) break;}}return 0;
}

CUMT2022算法设计与分析A上机考试相关推荐

  1. CUMT2022算法设计与分析A考试

    CUMT2022算法设计与分析A考试 综合题 40 矩阵连乘 10 流水作业调度变形 10 最短路径 10 最小生成树 10 算法分析 时间复杂度 15 01背包变形 15 算法设计 称重 15 积木 ...

  2. 【算法设计与分析】期末考试知识总结(知识超浓缩版)

    目录 简要介绍 ·复杂度 ·迭代 插入排序 二分查找 快排划分 选择排序 计数排序 基数排序 桶排序 ·递归 递归式的计算-四种方法 欧几里得算法 汉诺塔问题 快速排序 归并排序 堆排序 ·分治 二维 ...

  3. 哈工大2021算法设计与分析期末试题

    注1:本试题为回忆版,因而部分语言描述可能有不准确的地方,还请谅解! 注2:PDF文件近期将上传至Github的HITSZ-OpenCS项目(2022.04.05update:已经完成上传) 注3:自 ...

  4. 2020-2021中科院陈玉福算法设计与分析期末考试

    2020-2021中科院陈玉福算法设计与分析期末考试 中科院沈阳计算所 时文康 于2020.12.31 一.(20 分)简答题 1,陈述算法在最坏时间下的时间复杂度和平均时间复杂度:这两种评估算法复杂 ...

  5. 计算机算法设计与分析期末考试试卷,算法设计与分析期末考试卷及答案a

    <算法设计与分析期末考试卷及答案a>由会员分享,可在线阅读,更多相关<算法设计与分析期末考试卷及答案a(15页珍藏版)>请在人人文库网上搜索. 1.一填空题(每空2分,共30分 ...

  6. SDU 2021.1 算法设计与分析考试 回忆版

    SDU 2021.1 计科 算法设计与分析考试 计算题 DFSDFSDFS:画出深度优先树:给出每个点的开始时间和结束时间:给出每条边的分类 有向图上的多源最短路径,要求计算distancematri ...

  7. 计算机算法设计与分析期末试题,算法设计与分析期末考试试卷(D卷)(含答案).doc...

    算法设计与分析期末考试试卷(D卷) 一.选择题(0分,每题分) .D A.n2/2 + 2n的渐进表达式上界函数是O(2n) B.n2/2 + 2n的渐进表达式下界函数是Ω(2n) C.logn3的渐 ...

  8. 山东大学软件学院2022年春算法设计与分析考试

    山东大学软件学院2022年春算法设计与分析考试 时间:2022年6月9日14:00-16:00 试题 一. 选择题(单项选择题 5*2分) f ( n ) = 1 100 n 3 + 2 n + 3 ...

  9. 【算法设计与分析】经典常考三十三道例题AC代码

    ❥小虾目前大三,我校在大一下开设<数据结构>这门课,大二上开了<算法设计与分析>这门课,很庆幸这两门课的上机考试总成绩一门100,一门99,最后总分也都90+.下文会给出机试的 ...

最新文章

  1. centos防火墙端口配置
  2. 第六篇:并发-粒度锁
  3. 浅谈 underscore 内部方法 group 的设计原理
  4. 工厂设计模式–一种有效的方法
  5. SpringMVC redirect中文乱码问题
  6. java线程中的notifyAll唤醒操作
  7. Cesium:在地球上加载Geoserver图层
  8. Installing third-party firmware on x3-55 letv (by quqi99)
  9. ubuntu16.04安装google拼音输入法
  10. 5G物联网数据网关助力工业企业转型升级
  11. Springboot实现拦截器功能
  12. 批量html转word 或者 pdf
  13. Ubuntu18.04 ifconfig命令找不到
  14. 第一次写需求文档的心酸历程
  15. 【论文阅读】Region Proposal by Guided Anchoring
  16. ipv6无网络访问权限怎么办
  17. docker swam 安装kafka集群以及kfakamanger
  18. 弹出窗口与选择器(二)
  19. JAVA WEB 中间件为SERVLET(六)
  20. 涛思数据 TDengine 与华为云达成合作,正式入驻华为云市场

热门文章

  1. 考研复试计算机英语自我介绍,考研复试英语自我介绍范文10篇
  2. Infortrend新一代GS统一存储系统性能全面提升
  3. Android R config_biometric_sensors默认通用定制common可好?
  4. js实现谷歌网站统计
  5. excel快速输入金额大写
  6. SK海力士完成收购英特尔部分业务案的第一阶段;SENSORO推出全新ESG解决方案品牌 | 全球TMT...
  7. 华为鸿蒙os状态栏,华为再推新版鸿蒙OS系统!UI外观设计大变样 多达19款机型可升级...
  8. ResNet 残差网络的详细解释
  9. 初创电商步步谈(一)- 前期准备的内容真不少
  10. Android studio Build时,Download maven-metadata.xml卡住不动的问题