2021年 西南石油大学超算与并行计算团队南充校区分队 第二届招新赛题解

news/2024/4/26 23:38:07/文章来源:https://www.cnblogs.com/lxq-247A3/p/16636768.html

    2021年SWPU(南充)超算团队招新赛总体难度并不是很大,大部分题目考察的是基本的编程能力,题目中涉及到了一些并行计算相关的名词和知识,选手在参加比赛的同时,既能够展示自己的实力,也可以学习到相关的一些知识。下面是本次招新赛的题目

 

A.简单输出

题目描述:

题目要求:

  输出一句看起来就很重要的话。

难度天梯赛L1-1

知识点:输入输出格式化控制

题解:这个题的背景便是团队的一个基本的介绍,主要是带领选手们了解超算团队,题目要求很简单,其实就是输出一句话,那句话已经在题目中加粗标出了哦,直接输出就行。

参考代码

#include<stdio.h>
int main()
{printf("超算与并行计算团队");return 0;
}

 

B.旅行预算

题目描述:

 题目要求:

难度:天梯赛L1-2

知识点:简单的数学运算

题解:这个题的背景是2021年ACM-IPCC比赛的故事,很可惜这场现场赛因为疫情改成了线上,主要是带领选手们了解超算比赛,激发选手们的兴趣,题目要求便是一个参赛费用的计算,首先先计算出6个人机票的费用,注意是往返要乘2,住宿是2晚,6个人需要3间房间,计算出住宿的费用后,相加即可得到正确答案。

参考代码:

#include<stdio.h>
int main()
{int F,H;scanf("%d %d",&F,&H);int W;W=F*6*2+H*(6/2)*2;printf("%d\n",W);return 0;} 

 

C.SLIC超像素分割法

题目描述:

 题目要求:

难度:天梯赛L1-3

知识点:简单计算+if分支判断

题解:这个题的背景超像素算法是2021年ACM-IPCC比赛赛题的内容,比赛的内容是对超像素算法进行优化,加入团队后大家可以学习这方面的知识,题目的内容只是比赛的一个很小的一部分,判断像素点与聚类中心之间的相关性。首先用距离公式计算出他们之间的距离,再使用if按照题目中的描述判断相关性即可

参考代码:

#include<stdio.h>
#include<math.h>
int main()
{int x,y,s;int a,b;double t;scanf("%d %d %d",&x,&y,&s);scanf("%d %d",&a,&b);t=sqrt((x-a)*(x-a)+(y-b)*(y-b));if (t<=s){printf("Belong To C\n");}else if (t>s && t<=2*s){printf("Similar To C\n");}else{printf("None Of C\n");}return 0;}

 

D.字母统计

题目描述:

 

难度:天梯赛L1-4

知识点:字符串

题解:这个题的话,主要考察字符串,pra便是超算的简写哦(parallel),挨着判断字符串中每个字母,统计其个数就好

参考代码:

#include<stdio.h>
#include<string.h>
int main()
{char s[5000];int p=0,r=0,a=0,i;gets(s);for (i=0;i<strlen(s);i++){if (s[i]=='p'){p++;}if (s[i]=='r'){r++;}if (s[i]=='a'){a++;}}printf("P: %d\nR: %d\nA: %d",p,r,a);return 0;
}

 

E.进制转换

题目描述:

题目要求:

难度:天梯赛L1-5

知识点:字符串,进制转换

题解:这个题的话,主要是带领选手了解计算机网络和位运算相关的知识,计算机网络是计算机专业基础课之一哦,在算法优化过程中,如果能使用位运算,会提高程序运行的效率。按照题目的要求,使用字符串先保存下这32位的数据,将32位的数据按照8位一组划分进行计算,划分出的每组8位数字视为一个二进制数据,按照二进制转换为十进制的方法进行计算,得到四个十进制数据,依次输出,即可完成划分。

参考代码:

#include<stdio.h>
int main()
{char s[40];gets(s);int b=128,i;int ans=0;for (i=0;i<8;i++){ans=ans+(s[i]-48)*b;b=b/2;}printf("%d.",ans);b=128,ans=0;for (i=8;i<16;i++){ans=ans+(s[i]-48)*b;b=b/2;}printf("%d.",ans);b=128,ans=0;for (i=16;i<24;i++){ans=ans+(s[i]-48)*b;b=b/2;}printf("%d.",ans);b=128,ans=0;for (i=24;i<32;i++){ans=ans+(s[i]-48)*b;b=b/2;}printf("%d",ans);return 0;
}

 

F.进程调度

题目描述:

 题目要求:

难度:天梯赛L1-4

知识点:数组,阅读理解(操作系统)

题解:这个题目的描述涉及计算机操作系统里进程调度方面的内容,描述中给出的三种进程调度的方式是计算机基本的三种进程调度的方式,在超算中,灵活控制进程进行调度,可以减少程序的运行时间,从而使程序得到优化。这个题是个简单的模拟题,模拟出先来先服务调度方式(就是让数组中的元素一个一个的离开)即可。

参考代码:

#include<stdio.h>
int main()
{int n;scanf("%d",&n);int i,j,a[25];for (int i=0;i<n;i++){scanf("%d",&a[i]);}for (i=0;i<n;i++){printf("Now:%d Wait:",a[i]);for (j=i+1;j<n;j++){if (j==i+1){printf("%d",a[j]);}else{printf(" %d",a[j]);}}printf("\n");}return 0;} 

 

G.团队练习(上集)

题目描述:

题目要求:

难度:天梯赛L1-6

知识点:结构体

题解:这个题的背景是超算比赛的比赛方式,目的是让选手们了解超算比赛是一个怎样的比赛。主要是考察结构体的使用,需要将学生的学号和成绩(程序的运行时间)记录下来,找出运行时间最短的学生,输出他的学号即可。(当然也可以不使用结构体,记录下最佳运行时间和其对应的学生信息即可)

参考代码:

#include<stdio.h>
struct pa{char s[15];//开 long long 也行int score;     
}PRA[100];
int main()
{int n,i;scanf("%d\n",&n);for (i=0;i<n;i++){if (i==n-1){scanf("%s %d",PRA[i].s,&PRA[i].score);     }else{scanf("%s %d\n",PRA[i].s,&PRA[i].score); }}int min=PRA[0].score; int flag=0;for (i=1;i<n;i++){if (PRA[i].score<min){min=PRA[i].score;flag=i;}}printf("%s",PRA[flag].s);return 0;
}

 

H.团队练习(下集)

题目描述:

 题目要求:

难度:天梯赛L1-6+

知识点:排序

题解:这个题的考点是排序,为了增加难度,于是便要求将排名相同的同学进行特殊处理,其难度也不是很大,排序结束后,判断排名在第i个同学的成绩是否与第i-1个同学的成绩相同即可,如果相同,就输出相同的排名,在计算排名前10%的同学时,按照要求先计算出礼物的数量,再用同样的方法处理排名并列的情况即可(有个小坑,n的值可能为0,需要单独处理)

参考代码:

#include<stdio.h>
int main()
{int n,i,j;int a[200];scanf("%d",&n);for (i=0;i<n;i++){scanf("%d",&a[i]);}for (i=0;i<n;i++){for (j=i;j<n;j++){if (a[i]>a[j]){int t;t=a[i];a[i]=a[j];a[j]=t;}}}for (i=0;i<n;i++){int ii=0;while (a[i]==a[i+ii]){printf("RANK%d:%d\n",i+1,a[i+ii]);ii++;}i=i+ii-1;}int NN;if (n==0){printf("学长需准备0份礼物\n");}else{if(n%10==0){NN=n/10;} else{NN=n/10+1;}int ii=0;while (a[NN-1]==a[NN+ii]){ii++;}NN=ii+NN;printf("学长需准备%d份礼物\n",NN);}return 0;
}

 

I.质数火车

题目描述:

题目要求:

难度:天梯赛L1-7

知识点:思维、素数

题解:素数判断是基本的一个算法,根据题意,我们只需要找出从2开始计算的素数和小于l时的所有素数,统计选出的素数的个数即可。

参考代码:

#include<bits/stdc++.h>
using namespace std;
int n,x;
long long sum=0;
int pd(int y) {for(int i=2; i*i<=y; ++i) {if(y%i==0) return 0;}return 1;
}
int main() {scanf("%d",&n);if(n<2) {printf("0\n");return 0;} else if(n==2) {printf("2\n1\n");return 0;}for(int i=2; i<=n; ++i) {if(i%2==0&&i!=2) continue;if(sum+i>n) {printf("%d\n",x);return 0;}if(pd(i)) {printf("%d\n",i);sum+=i;x++;}}return 0;
}

 

J.寻找你的幸运之门

题目描述:

 题目要求:

难度:天梯赛L1-7

知识点:思维

题解:看图,可以发现题目中门的排列是不是像一颗二叉树,我们可以采用二进制的思想来简化这个问题,二进制的两个数字正好就能表示向左和向右走的两个状态,用0表示向左走,1表示向右走,从第1扇门开始存储,依次存放数据,这样,得到的二叉树的根节点为数据的最高位,而叶子节点则是二进制的最低位,最后得到的这个二进制表示的数字,就是幸运之门的编号。

参考代码:

#include<stdio.h>
#include<math.h>
int main()
{int n,l,i,J;scanf("%d %d\n",&n,&l);for (J=0;J<l;J++){char s[50];gets(s);long long ans=0;long long b=pow(2,n-1);for (i=0;i<n;i++){if (s[i]=='R'){ans=ans+b;} b=b/2;}printf("%lld\n",ans+1); }return 0;
}

 

K.MPI(Message Passing Interface),消息传递接口

题目描述:

 题目要求:

难度:天梯赛L1-8

知识点:阅读理解,字符串处理

题解:这个题的题面提及了MPI技术,MPI技术主要是用于进程间通信的,在短时间内难以理解,这个题目的要求是使用0号进程来完成其他进程的规约操作,换言之,就是使用0号进程将其他进程的结果使用相应的规约原语(MPI_SUM)结合起来,原语是用来实现某个功能的语句,题目中给出的MPI_SUM就是求和的意思,按照进程的编号,依次进行求和即可。首先,我们要跟据字符串,判断原语的种类和数据的类型。MPI_INT和MPI_DOUBLE对应的int和double类型直接进行加法计算即可,MPI_CHAR对应的char类型比较难处理一点。则需要暂时将消息的内容记下来,再跟据进程编号,依次将消息连接起来。MPI技术也是并行计算的核心技术之一,也是加入团队后需要深入学习的内容。

 参考代码:
#include<stdio.h>
#include<string.h>
int main()
{char S[12][50];int n,i;scanf("%d\n",&n);char a[15];gets(a);if (a[4]=='I' && a[5]=='N' && a[6]=='T'){int sum=0;for (i=0;i<n-1;i++){int s1,s2;scanf("%d %d\n",&s1,&s2);sum=sum+s2;}char z[15];gets(z);if (z[4]=='S' && z[5]=='U' && z[6]=='M'){printf("%d\n",sum);    } } if (a[4]=='D' && a[5]=='O'){double sum=0;for (i=0;i<n-1;i++){double s1,s2;scanf("%lf %lf\n",&s1,&s2);sum=sum+s2;}char z[15];gets(z);if (z[4]=='S' && z[5]=='U' && z[6]=='M'){printf("%.2f\n",sum);    } }if (a[4]=='C' && a[5]=='H'){for (i=0;i<n-1;i++){int n;scanf("%d ",&n);scanf("%s",S[n-1]);}char z[15];scanf("%s",z);if (z[4]=='S' && z[5]=='U' && z[6]=='M'){for (i=0;i<n-1;i++){printf("%s",S[i]);if (i!=n-1){printf(" ");}}} }return 0; } 

 

L.遥控机器人

题目描述:

 题目要求:

难度:天梯赛L1-8

知识点:模拟

题解:这个题的本质是一个模拟题,按照题目要求,模拟机器人的移动即可。在题目中,提及了指令集的概念,指令便是指挥机器工作的指令,偏向计算机底层和它的组成原理。而在超级计算机上研究高性能计算,也要对超级计算机的组成原理有所了解,才可能在项目中起到事半功倍的效果。

参考代码:

#include<stdio.h>
int main()
{int i,N;long long x=0,y=0;int flag=0;scanf("%d",&N);for (i=0;i<N;i++){int op;scanf("%d",&op);if (op==0){flag=1;}if (op==-1){flag=0;}if (op==1){int imm;scanf("%d",&imm);if (flag==1){y=y+imm;}}if (op==2){int imm;scanf("%d",&imm);if (flag==1){y=y-imm;}}if (op==3){int imm;scanf("%d",&imm);if (flag==1){x=x-imm;}}if (op==4){int imm;scanf("%d",&imm);if (flag==1){x=x+imm;}}}printf("(%d,%d)\n",x,y);return 0;
}

 

M.水果

题目描述:

 题目要求:

难度:天梯赛L2-1

知识点:贪心算法

题解:这个题应该是全场到目前为止第一个涉及算法的题目,题目描述看上去像个背包,但由于“可以允许取出一部分库存”,故贪心即可求解这个问题,按照总售价/库存就可以得到单位水果的售价,对其进行排序,从高到低进行选择即可。其实,在高性能计算优化过程中,也会涉及到算法优化的。

参考代码:

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std; 
struct a{double x;double y;double v;
}gj[110];
bool cmp(a s1,a s2)
{return s1.v>s2.v;
}
int main()
{int n,s,i;scanf("%d %d",&n,&s);for (i=0;i<n;i++){scanf("%lf",&gj[i].x);}for (i=0;i<n;i++){scanf("%lf",&gj[i].y);}for (i=0;i<n;i++){gj[i].v=gj[i].y/gj[i].x;    }sort (gj,gj+n,cmp);double money=0;for (i=0;i<n;i++){if (gj[i].x<=s){s=s-gj[i].x;money=money+gj[i].y;continue;}else{money=money+gj[i].y*(s/gj[i].x);break;}}printf("%.2f",money); return 0; 
}

 

N.HPC(高性能计算机群)

题目描述:

题目要求:

 

难度:天梯赛 L2-2

知识点:DFS搜索

题解:防AK题,这个题的背景是HPC超算集群,但题目要求跟这个没啥关系,了解一下即可。题目要求是选择一个节点,寻找其他节点到该节点的最小距离和,我们可以采用深度优先搜索的方式,将每一个节点设置为起点,在这颗集群树上依次按层次搜索,计算,比较得到最小距离和即可。

参考代码:

#include<stdio.h>
#include<string.h>
struct tree{int val;int left;int right;int parent;
}Tree[1024];int vis[1024]={0};
int bestans=-1;
int value;
int dfs(int i,int deep)
{vis[i]=1;value=value+deep*Tree[i].val;if (Tree[i].parent!=0 && vis[Tree[i].parent]==0)//搜索父节点
    {dfs(Tree[i].parent,deep+1);}if (Tree[i].left!=0 && vis[Tree[i].left]==0)//搜索左子节点
    {dfs(Tree[i].left,deep+1);}if (Tree[i].right!=0 && vis[Tree[i].right]==0)//搜索右子节点
    {dfs(Tree[i].right,deep+1);} 
}int main()
{int n,i;scanf("%d",&n);for (i=1;i<=n;i++){scanf("%d %d %d",&Tree[i].val,&Tree[i].left,&Tree[i].right);if (Tree[i].left!=0)//由子节点计算出对应的父节点进行保存,便于搜索
        {Tree[Tree[i].left].parent=i;}else{Tree[Tree[i].left].parent=0;}if (Tree[i].right!=0){Tree[Tree[i].right].parent=i;}else{Tree[Tree[i].right].parent=0;}}for (i=1;i<=n;i++){value=0;memset(vis,0,sizeof(int)*n+1);dfs(i,0);if (bestans==-1 || bestans>value){bestans=value;}}printf("%d\n",bestans);} 

 

比赛结果如下(满分200分,只截取了120分以上的情况,一人AK,还是不错的哦~):

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_2958.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java并发编程总结

——《Java多线程编程实战指南》学习及其他参考博客总结 串行、并行、并发 (1)串行:顺序执行多个任务,一个时刻只有一个任务在执行 (2)并行:多个CPU(核)同一时间多个任务,一个时刻有多个任务在执行 (3)并发:单个CPU(核)同一时间间隔内交替执行多个任务,一个时刻只有一…

学习随笔——洛谷题目P1636解答

摘要:欧拉图的应用。 题目原地址如下:https://www.luogu.com.cn/problem/P1636 题目截图如下: 一笔画问题,考察欧拉回路的定义,即所有节点的入度出度的和都为偶数即可满足欧拉回路的性质。我们为方便分析可加入一条线,发现加入一条边后会改变两个点的度数和,只需寻找奇数…

Spring的自动化装配

在Spring中,对象无需自己查找和创建与其所关联的其他对象。相反,容易负责把需要相互协作的对象引用赋予各个对象。例如,一个订单管理的组件需要信用卡认证组件,但它不需要自己创建信用卡认证组件。订单管理组件只需要表明自己两手空空,容器就会主动赋予它一个信用卡认证组…

jQuery使用ajax

1.导入jQuery的js库2.jQuery发送单一的get请求$.get(url:接口地址,data:{id:1,name:2,......}function(res){// res是服务器返回的数据} ) 3.jQuery发送单一的post请求$.post(url:接口地址,data:{id:1,name:哈哈哈,......}function(res){// res是服务器返回的数据} ) 4.jQuery发…

服务器TIME_WAIT和CLOSE_WAIT详解和解决办法

服务器TIME_WAIT和CLOSE_WAIT详解和解决办法 - 悟寰轩-叶秋 - 博客园 https://www.cnblogs.com/sunxucool/p/3449068.html 昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下: http://blog.csdn.net/shootyou/article/details/6615051 里头的分析过程有提到,…

引入VUE的方式(8种)

第一类: 1、本地引入 把vue的js文件下载下来引入 2、CDN引入 把vue.js网址引入 3、把vue.js文件放在项目文件夹src中引入项目 然后webpack打包4、编辑器直接生成cdn的方式第二类: 5、自己构建vue的脚手架/* 1.新建项目 alipay 2.初始化配置文件:npm init -y 3.下载依赖:npm…

PipeCAD-捕捉选项

PipeCAD-捕捉选项PipeCAD-捕捉选项 eryar@163.com Key Words. PipeCAD, 三维管道设计软件,三维工厂设计软件,三维配管软件 1 概述 在PipeCAD交互设计过程中,有些建模操作需要在模型中捕捉点来进行定位。通过捕捉点可以快速、准确建模。一般的CAD软件中都有捕捉功能,为了给用…

CentOS 安装Nginx并部署vue项目

安装 yum install nginx配置nginx设置开机启动 systemctl enable nginx启动服务 systemctl start nginx停止服务 systemctl stop nginx重启服务 systemctl restart nginx修改配置后热重载 systemctl reload nginxnginx常用目录路径 説明/etc/nginx/ 保存Nginx设置文件的目录/et…

多示例学习

在机器学习中,多示例学习(Multiple Instance Learning 简称 MIL)是由监督型学习算法演变出的一种方法,定义“包”为多个示例的集合,具有广泛的应用。学习者不是接收一组单独标记的实例,而是接收一组带标签的包,每个包拥有多个实例。在多实例二进制分类的简单情况下,如果包…

在一些常见用例中修复详尽的deps警告

反应开发 在一些常见用例中修复详尽的deps警告在里面 上一篇文章 ,我们查看了正确使用 useEffect 钩子需要采用的正确心智模型。在本文中,让我们看看如何调整这种思维模型来解决一些常见的用例。这也将帮助您避免详尽的部门警告。 在 mount 上做某事 首先,我认为这个想法本身…

js实现幻灯片

使用原生js实现轮播图 html代码<div class="slide"><ul><li style="display: block;"><img src="1.jpg"></li><li><img src="2.jpg"></li><li><img src="3.jpg"&…

字节跳动基于 ClickHouse 优化实践之“查询优化器”

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 相信大家都对大名鼎鼎的 ClickHouse 有一定的了解了,它强大的数据分析性能让人印象深刻。但在字节大量生产使用中,发现了 ClickHouse 依然存在了一定的限制。例如:缺少完整的 upsert…

echarts-dataset数据源配置项

如下效果图: 代码入下:let box4 = document.querySelector(.box4)let myCharts3 = echarts.init(box4)myCharts3.setOption({dataset:{// 二维数组存放数据source:[// 0 1 2 3 4 5 六个维度[衣服,22,15,36,35,18],[食品,60,39,50,15,22],[生活用品,60,52,36,15…

RN 调试

使用前先关闭debugger模式关闭谷歌,在打开调试工具,然后再打开debugger 1.使用谷歌浏览器来调试不能查看标签结构不能查看网络请求 2.使用rn推荐的工具react-native-debugger来调试https://github.com/jhen0409/react-native-debugger/releases可以查看标签结构不能查看网络请…

Excel聚光灯设置

1.同时按住 ALT+F11进入vba 2.双击要设置的sheet页 3.输入以下代码Private Sub Worksheet_SelectionChange(ByVal Target As Range)Cells.Interior.ColorIndex = xlNoneTarget.EntireRow.Interior.ColorIndex = 24Target.EntireColumn.Interior.ColorIndex = 24End Sub4.效果如…

【三维地图】开发攻略 —— 详解“GeoJSON”技术和应用场景

GeoJSON ,一个用于存储地理信息的数据格式。GoeJSON对象可以表示几何、特征或特征集合,支持:点、线、面、多点、多线、多面和几何集合。在基于平面地图,三维地图中都需要用到的一种数据类型。 由于这种格式在三维地图中的优秀属性,使用它我们不仅可以轻松实现地图类功能,…

JavaScript设计模式及代码实现——单例模式

单例模式1 定义保证一个类仅有一个实例,并提供一个访问它的全局访问点。2 应用时机当一个类的实例被频繁使用,如果重复创建这个实例,会无端消耗资源。比如 dialog 弹窗会被全局重复使用 业务功能本身决定了全局只能有唯一的实例。比如 redux 管理的数据,只能有唯一的一份3 …

ubuntu18.04屏幕录制Vokoscreen

Vokoscreen 可被视为具有良好分类菜单的简单屏幕录制机的更好 UI 版本。- 除了在simplescreenrecorder中包含的所有功能,Vokoscreen 还支持外部网络摄像头以及内置网络摄像头。 然而,它不支持在simplescreenrecorder中可用的 JACK 音频。 下载命令:sudo apt install vokoscr…

磁共振成像原理

目录1. 原子核的自旋2. 进动3. 磁共振现象4. 射频脉冲1. 原子核的自旋 原子有原子核和绕核运动的电子组成。 原子核的自旋:质子数和中子数一个为奇数、一个为偶数; 两者都为奇数这两种情况的原子核就会自旋。原子核是带正电,绕自旋轴旋转,效应相当于环形电流,周围会产生磁…

业务流程可视化-让你的流程图Run起来(7.运行状态持久化轻量工作流支持)

前言 感谢大家阅读本项目系列文章和对项目的支持。分享一下我对这个项目的新的改进。 之前项目做到了流程设计可视化和流程运行结果可视化。 本期发布的版本中实现了中间的运行过程的实时可视化,和流程状态持久化问题。 大家可以根据项目提供的接口自由扩展自己的工作流实现。…