湖南中医药大学信息科学与工程学院第四届大学生程序设计竞赛——正式赛题解(代码片段)

a碟 a碟     2022-10-24     674

关键词:

目录

问题A:X星人的统计

题目描述
一年一度的X星人口普查又开始了,其中有一项是统计各民族X星人的数量。X星人分属四个不同的民族,四个民族分别用A、B、C和D表示。
现在给出N个X星人的民族信息,请统计各民族X星人的总数。

输入
单组输入。
第1行输入统计的总人数N,N<=10^6。
第2行输入N个X星人的民族信息,四个民族分别用A、B、C和D表示,两两之间用英文空格隔开。

输出
请按照A、B、C、D的顺序分别输出每一个民族的总人数,两两之间用英文空格隔开。

样例输入

10
A C B D A C B D D A

样例输出

3 2 2 3

分析
签到题,直接按照题意模拟即可

代码

#include <iostream>
#include <cstdio>
using namespace std;
const int N=1e6+5;
int num[5];
int main()

    int n;scanf("%d",&n);
    for(int i=1;i<=n;i++)
        getchar();
        char x;scanf("%c",&x);
        num[x-'A']++;
    
    for(int i=0;i<4;i++)
        if(i!=3)printf("%d ",num[i]);
        else printf("%d\\n",num[3]);
    
    return 0;

问题B:X星人的报数

题目描述
N个X星人站成一排,他们发明了一种奇怪的报数方式。
从第1个人开始报数,第1个人报数为1,第2个人报数为2,接下来奇数位置的人报数为前一个人报数加1,偶数位置的人报数为前一个人的两倍。
请问第N个人的报数是多少?

输入
输入一个正整数N(N<=40)。

输出
输出第N个人的报数。

样例输入

4

样例输出

6

题解
签到题,也是按照题目意思简单模拟即可。

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;
const int N=45;
int a[N];
int main()

    int n;scanf("%d",&n);
    a[1]=1,a[2]=2;
    for(int i=3;i<=n;i++)
        if(i%2)a[i]=a[i-1]+1;
        else a[i]=2*a[i-1];
    
    printf("%d\\n",a[n]);
    return 0;

问题C:X星人的迷宫

题目描述
X星人进入了一个树形迷宫,该迷宫由一个N层的满二叉树组成。迷宫的每一个节点都有一个计分权重,只有找到那条从根节点开始到叶子结点的计分权重和最大的路径,X星人才能够顺利走出迷宫。
现在给出该树形迷宫每一个节点的权重值,你能否编写一个程序计算出权重和最大的路径所对应的总权重。

输入
单组输入
第1行输入一个正整数N,表示二叉树的节点层数。(N<=20)
第2行输入2^N-1个正整数,分别表示迷宫中每一个节点的权重,两两之间用英文空格隔开。第1个数字表示根节点的权重,接下来两个数字表示根节点左、右孩子的权重,再接下来四个数字表示第3层的四个节点的权重,…,以此类推。每个节点的权重均不超过1000。

输出
输出从根节点出发到叶子节点权重和最大的路径所对应的权重。

样例输入

3
10 20 30 100 20 50 40

样例输出

130

题解
中等题,直接用DFS或者BFS搜索,搜索到根节点时,维护一个最大的权重即可。

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;
const int N=1500000+5;
int a[N];
int n,ans=0;
void dfs(int x,int sum)
    if(x>n)return ;
    sum+=a[x];
    ans=max(ans,sum);
    dfs(x*2,sum);
    dfs(x*2+1,sum);

int main()

    scanf("%d",&n);
    n=pow(2,n)-1;
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    dfs(1,0);
    printf("%d\\n",ans);
    return 0;

问题D:X星人的高考

题目描述
一年一度的X星高考如期举行。今年X星新高考一卷的数学真的很难,据说把很多考生都考哭了。
今年数学考试的多选题仍然是4道题,每题5分,共20分。在每小题给出的4个选项中,有多项符合题目要求,全对得5分,选对但不全得2.5分,有选错的得0分。每道题均包含A、B、C和D四个选项。
现在给出某X星考生的多选题答案和正确答案,请编写一个程序计算该X星考生最终多选题的得分

输入
单组输入。
每组输入两行,第1行包含该X星人四道多选题的答案,两两之间用空格隔开;第2行包含四道多选题的正确答案,两两之间用空格隔开(答案不一定按照字典序排列)。

输出
输出该X星考生最终多选题的得分(答案保留一位小数)。

样例输入

A BC AC ABC
AB BC AD AB

样例输出

7.5

题解
简单题,可以直接在正确答案中依次判断是否存在X星考生选择的答案,若全部完全匹配,则全对得5分;若选对但不全对得2.5分;一旦有选错的得0分。
需要注意,ABCD是包含AD的,一开始有的同学直接判断在ABCD中使用find函数,查是否能find到AD,这是显然不对的。

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;
string a[5],b[5];
int main()

    for(int i=1;i<=4;i++)cin>>a[i];
    for(int j=1;j<=4;j++)cin>>b[j];
    double ans=0;
    for(int i=1;i<=4;i++)
        string s=a[i],t=b[i];
        int num=0,flag=1;
        for(int i=0;i<s.size();i++)
            if(t.find(s[i])<t.size())num++;
            else flag=0;
        
        if(flag)
            if(num==t.size())ans+=5;
            else ans+=2.5;
        
    
    printf("%.1f\\n",ans);
    return 0;

问题E:X星人的匹配

题目描述
X星人有一个只包含数字0和1的目标串a和一个匹配串b ,匹配串除了0和1还有两种特殊匹配符,第一种是’?‘可以匹配任何一个字符,另外一种是’*'可以匹配任意字符串(包含空字符串),现在需要你判断目标串和匹配串能不能完全匹配(对于两个串都不能有未匹配字符)。

输入
单组输入,第一行输入目标串a,第二行输入匹配串b。输入保证两个字符串长度均<=1e3。

输出
完全匹配输出true,否则输出false。

样例输入

00
*

样例输出

true

题解
困难题,动态规划, d p ( i , j ) dp(i,j) dp(i,j) 代表考虑 a a a中以 i i i为结尾的子串和 b b b中的 j j j为结尾的子串是否匹配。即最终我们要求的结果为 d p [ n ] [ m ] dp[n][m] dp[n][m] n n n a a a串的长度, m m m b b b串的长度)。
状态转移:也就是我们要考虑 d p ( i , j ) dp(i,j) dp(i,j)如何求得,前面说到了 b b b有三种字符,所以这里的状态转移也要分三种情况讨论:
b [ j ] b[j] b[j]为普通字符:匹配的条件是前面的字符匹配,同时 a a a中的第 i i i个字符和 b b b中的第 j j j位相同。 即 d p ( i , j ) = d p ( i − 1 , j − 1 ) & & a [ i ] = = b [ j ] dp(i,j) = dp(i - 1, j - 1) \\&\\& a[i] == b[j] dp(i,j)=dp(i1,j1)&&a[i]==b[j]
b [ j ] b[j] b[j] ′ ? ′ '?' ?:匹配的条件是前面的字符匹配, a a a中的第 i i i个字符可以是任意字符。即 d p ( i , j ) = d p ( i − 1 , j − 1 ) & & b [ j ] = = ′ ? ′ dp(i,j)=dp(i-1,j-1)\\&\\&b[j]=='?' dp(i,j)=dp(i1,j1)&&b[j]==?
b [ j ] b[j] b[j] ′ ∗ ′ '*' :可匹配任意长度的字符,可以匹配 0 0 0个字符、匹配 1 1 1个字符、匹配 2 2 2个字符…
当匹配为 0 0 0个: d p ( i , j ) = d p ( i , j − 1 ) dp(i,j)=dp(i,j-1) dp(i,j)=dp(i,j1)
当匹配为 1 1 1个: d p ( i , j ) = d p ( i − 1 , j − 1 ) dp(i,j)=dp(i-1,j-1) dp(i,j)=dp(i1,j1)
当匹配为 2 2 2个: d p ( i , j ) = d p ( i − 2 , j − 1 ) dp(i,j)=dp(i-2,j-1) dp(i,j)=dp(i2,j1)

当匹配为 k k k个: d p ( i , j ) = d p ( i − k , j − 1 ) dp(i,j)=dp(i-k,j-1) dp(i,j)=dp(ik,j1)
因此对于 b [ j ] = ′ ∗ ′ b[j]='*' b[j]=的情况,想要 d p ( i , j ) = t r u e dp(i,j)=true dp(i,j)=true,只需要其中一种情况为$true $即可。也就是状态之间是「或」的关系:
d p [ i ] [ j ] = d p [ i ] [ j − 1 ] ∣ ∣ d p [ i − 1 ] [ j − 1 ] ∣ ∣ . . . ∣ ∣ d p [ i − k ] [ j − 1 ] (

酷客多基金在济南大学成立“酷客多奖助学金“

...玮,济南大学教育发展基金会、学生工作处、信息科学与工程学院相关负责人及学院师生代表共同出席捐赠签约仪式。仪式由信息科学与工程学院党委书记邱鲁军主持。陈月辉副校长代表济南大学向信息科学与工程学院2004级校... 查看详情

湖南师范大学是一本还是二本院校?

...部高校基础能力建设工程”“卓越教育培养计划”“国家大学生创新性实验计划”“国家建设高水平大学公派研究生项目”,是全国深化创新创业教育改革示范高校、中国政府奖学金来华留学生接收院校、教育部来华留学示范基... 查看详情

有哪些大学的哪些专业是与大数据有关的??

...这个大数据专业应该是办得不错的。3、中南大学该校是湖南最好的大学,属于211和985工程学校。是第一批开设大数据与专业的高校。网上的一些排名中将该校的大数据专业排在了全国第一的位置。4、中国人民大学人大属于第二... 查看详情

高分!!电子竞赛

...生电子设计竞赛广东省大学生程序设计竞赛也称为ACM/ICPC第四届广东省大学生程序设计竞赛(ACM/ICPC广东省赛)第四届广东省大学生程序设计竞赛(ACM/ICPC广东省赛)实施方案The4thGuangdongCollegiateProgrammingContest–GDCPC’2006竞赛宗旨... 查看详情

考研东北大学管理科学与工程专业

...985或者211的学生管理科学与工程系下设3个研究所,包括信息管理与决策研究所、管理科学与信息系统研究所、工业工程研究所,负责管理科学与工程学科一级学科博士点及硕士点建设。同时承担工业工程、信息管理与信息系统2... 查看详情

北京交通大学海滨学院计算机科学与技术课程,北京交通大学海滨学院计算机科学与技术专业2016年在内蒙古理科高考录取最低分数线...

类似问题答案北京交通大学海滨学院计算机科学与技术专业2015年在内蒙古理科高考录取最低分数线学校地区专业年份批次类型分数北京交通大学海滨学院内蒙古计算机科学与技术2015二批理科355学校地区专业年份批次类型分数北... 查看详情

湖南师范大学计算机考研分数线2022

...分=300分)。总分:270分。天津中公考研官网信息显示,湖南师范大学2022年计算机40分(满分=100分)、60分(满分=150)、120分(满分=300分)。湖南师范大学简称“湖南师大”,位于湖南省长沙市,入选首批国家“211工程”重点建... 查看详情

湖南师范大学外语学院怎样?

...足,设备先进,使用率高,开放时间长。学院建有湖南省大学生英语活动中心1个,面积达1000余平方米。以上内容参考:百度百科——湖南师范大学外语学院 查看详情

北方民族大学计算机研究生培养方案,李强-北方民族大学-计算机科学与工程学院...

Modelingandexploitingcollaborativetracesinweb-basedcollaborativeworkingenvironment,ComputersinHumanBehavior,Volume30,Pages396-408,ISSN0747-5632,January2014.CollectiveTracesModelinginCollaborativeWorki 查看详情

北方民族大学计算机研究生培养方案,李强-北方民族大学-计算机科学与工程学院...

Modelingandexploitingcollaborativetracesinweb-basedcollaborativeworkingenvironment,ComputersinHumanBehavior,Volume30,Pages396-408,ISSN0747-5632,January2014.CollectiveTracesModelinginCollaborativeWorki 查看详情

湖南大学第十四届acm程序设计新生杯e.easyproblem(代码片段)

E.EasyProblemDescription:Zghhlikesnumber,buthedoesn‘tlikewritingproblemdescription.Sohewilljustgiveyouaprobleminsteadoftellingalongstoryforit.Nowgivenapositiveintegerxandkdigitsa1,a2,...,ak,canyoufindapositiveintegerysuchthatyisthemultipleofxandindecimalrepresentationycontainsalldigitsofa1,a2,...,... 查看详情

计算机类是啥专业?

...计算机专业很多,如数学与应用数学专业、自动化专业、信息与计算科学专业、通信工程专业、电子信息工程专业、计算机应用与维护专业等。1)数学与应用数学专业:专业要求与就业方向:数学与应用数学是计算机专业的基础... 查看详情

使用健身app对在校大学生体育人口和身体素质的影响研究——以湖南科技学院为例

摘要探讨基于目标导向管理的健身APP在大学生体育锻炼中的应用效果,为指导大学生选择科学有效的锻炼行为提供参考。方法:选择湖南科技学院2021年7—12月无健身APP使用经历的172名大学生为研究对象,采用随机数... 查看详情

2021第四届浙江省大学生网络与信息安全竞赛预赛部分writeup(代码片段)

文章目录WebCheckinREcrackPYCCryptoEasyRailfenceMISCqrimg前言:这次预赛感觉比去年难多了,难题都没解出来,还是太菜了orz。WebCheckin纯签到题,题目给了一个网址,直接burpsuite抓包,在响应头上拿到flag REcrackPYC题... 查看详情

湖南师范大学教务管理系统入口https://jwc.hunnu.edu.cn/

参考技术A一、湖南师范大学教务管理系统入口及简介湖南师范大学创建于1938年,位于历史文化名城长沙,是国家“211工程”重点建设的大学,国家“双一流”建设高校,教育部与湖南省重点共建“双一流”建设高校,教育部普... 查看详情

2015级计算机科学与技术软件工程(西北师范大学)助教总结

2015级计算机科学与技术软件工程(西北师范大学)助教总结18年软件工程课程助教总结非常有幸在上学期由代老师的推荐担任18年软件工程课程助教。在代老师、邹欣老师、周筠老师和郑蕊老师的监督和帮助下,我完成了助教工... 查看详情

湖南省大学生程序设计竞赛系统设计

...sp; 一、 引言 1.1项目背景湖南省每年都要举行大学生程序设计竞赛,每次竞赛时,由组委会发布竞赛要求,各大高校分别对自己学校的队伍进行报名。传统的以人工方式 查看详情

软件工程-第一次作业

...    我毕业于长春工业大学的计算机科学与工程学院,考研的第一志愿是吉林大学的软件学院,虽然没能如愿,但是可以调剂到这里真的已经很满足了。来读研的原因就是希望能够在研究生期间有更多的收获 , 查看详情