首页技术程序设计大赛?全国大学生程序设计大赛

程序设计大赛?全国大学生程序设计大赛

编程之家2026-07-02715次浏览

大家好,今天给各位分享程序设计大赛的一些知识,其中也会对全国大学生程序设计大赛进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

程序设计大赛?全国大学生程序设计大赛

求程序设计大赛题目

一、行棋游戏:

这是一种只有一个棋子的游戏。棋盘被分为N行,M列的方格,某个位置被标记为终点T。在任何一个位置,棋子可以向左、右、上、下四个方向移动一格,记移动距离为1。

在棋盘上有一些特殊方格——飞行器,每个飞行器有一个飞行距离d,棋子达到后可以继续在同方向再“飞”d格,且移动距离仍然为1。例如,如果棋子在位置(2,8),飞行器在位置(2,7),且飞行距离为5,那么棋子向左走一格,将直接到达位置(2,2)且移动距离为1。如果飞行点落在棋盘外,则只能停在边界上。例如,假若前个飞行器的飞行距离为10,那么棋子的最终位置是(2,1)。

而且,如果飞行后的落点仍然是飞行器,则将连续飞行到目的地,且中间点不对当前棋子产生影响,当然也不算任何移动距离。例如,如果棋子位置在(2,8),飞行器在(2,7)、(2,5),且飞行距离都是5,此时棋子向左移动一格,则(2,5)的飞行器将不产生作用,移动距离仍然为1。

你的任务就是,编程计算出棋子达到终点的最短移动距离。

输入:

程序设计大赛?全国大学生程序设计大赛

输入可以有多个测试用例。每个测试用例的第一行是两个整数N、M(3<=N, M<=100),表示棋盘的行列数。随后是一个整数K,表示飞行器的个数。接着的K行每行有3个正整数x、y、d,分别表示飞行器的位置(x,y)(2<= x<= N-1, 2<= y<= M-1)及飞行距离d。最后的两行第一行是棋子的初始位置S,第二行是终点位置T。你可以假设数据总是合法的,S与T、飞行器位置互不相同。输入0 0时表示结束

输出:

每个测试用例输出一行,即达到终点的最短距离。如果不能达到,则输出“Impossible”。

二、最少钱币数:

(这个问题的输入我感觉特别麻烦,希望给出比较好的输入方法)

这是一个古老而又经典的问题。用给定的几种钱币凑成某个钱数,一般而言有多种方式。例如:给定了6种钱币面值为2、5、10、20、50、100,用来凑15元,可以用5个2元、1个5元,或者3个5元,或者1个5元、1个10元,等等。显然,最少需要2个钱币才能凑成15元。

程序设计大赛?全国大学生程序设计大赛

你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。

输入:

输入可以有多个测试用例。每个测试用例的第一行是待凑的钱数值M(1<= M<= 2000,整数),接着的一行中,第一个整数K(1<= K<= 10)表示币种个数,随后是K个互不相同的钱币面值Ki(1<= Ki<= 1000)。输入M=0时结束。

输出:

每个测试用例输出一行,即凑成钱数值M最少需要的钱币个数。如果凑钱失败,输出“Impossible”。你可以假设,每种待凑钱币的数量是无限多的。

样例输入:

15

6 2 5 10 20 50 100

1

1 2

0

样例输出:

2

Impossible最佳答案第一题,典型的BFS找最短路

#include<iostream>

#define MAXN 105

using namespace std;

const int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};

int m,n;

int map[MAXN][MAXN];

int head,tail;

int queue[MAXN*MAXN][3];

bool hash[MAXN][MAXN];

int tx,ty;

int main()

{

while(cin>>n>>m&& n>0)

{

int i,j,k;

memset(map,0,sizeof(map));

cin>>k;

while(k--)

{

cin>>i>>j;

i--;

j--;

cin>>map[i][j];

}

memset(hash,true,sizeof(hash));

cin>>queue[0][0]>>queue[0][1];

queue[0][0]--;

queue[0][1]--;

queue[0][2]=0;

hash[queue[0][0]][queue[0][1]]=false;

head=0;

tail=1;

cin>>tx>>ty;

tx--;

ty--;

while(head<tail&& hash[tx][ty])

{

for(k=0;k<4;k++)

{

i=queue[head][0]+dir[k][0];

j=queue[head][1]+dir[k][1];

while(i>=0&& i<n&& j>=0&& j<m&& map[i][j]>0)

{

i+=map[i][j]*dir[k][0];

j+=map[i][j]*dir[k][1];

if(i<0|| i>=n|| j<0|| j>=m)

{

if(i<0) i=0;

if(i>=n) i=n-1;

if(j<0) j=0;

if(j>=m) j=m-1;

break;

}

}

if(i>=0&& i<n&& j>=0&& j<m)

if(hash[i][j])

{

queue[tail][0]=i;

queue[tail][1]=j;

queue[tail][2]=queue[head][2]+1;

hash[i][j]=false;

if(i==tx&& j==ty) cout<<queue[tail][2]<<endl;

tail++;

}

}

head++;

}

if(hash[tx][ty]) cout<<"impossible"<<endl;

}

return 0;

}

第二题是典型的DP

用f[i][j]表示用前i种币值凑出总额为j的钱所需的最少钱币个数

状态转移方程f[i][j]=min{f[i-1][j](i>0时),f[i][j-Ki]+1(j>=Ki时),无穷大};

#include<iostream>

#define MAXM 2010

#definme MAXK 15

using namespace std;

int m,k;

int K[MAXK];

int f[MAXK][MAXM];

int main()

{

while(cin>>m&& m>0)

{

int i,j;

cin>>k;

for(i=1;i<=k;i++) cin>>K[i];

memset(f,-1,sizeof(f));

f[0][0]=0;

for(i=1;i<=k;i++)

for(j=0;j<=m;j++)

{

int min;

min=-1;

if(f[i-1][j]!=-1&&(min==-1|| f[i-1][j]<min)) min=f[i-1][j];

if(j>=K[i]&& f[i][j-K[i]]!=-1&&(min==-1|| f[i][j-K[i]]+1<min)) min=f[i][j-K[i]]+1;

f[i][j]=min;

}

if(f[k][m]==-1) cout<<"impossible"<<endl;

else cout<<f[k][m]<<endl;

}

return 0;

}

ACM程序设计大赛的赛制是什么样的

大学生程序设计大赛介绍

[日期:2005-12-17]来源:作者:佚名 [字体:大中小]

ACM/ICPC(ACM International Collegiate Programming Contest,国际大学生程序设计竞赛)是由国际计算机界历史悠久、颇具权威性的组织ACM(Association for Computing Machinery,国际计算机协会)主办的,世界上公认的规模最大、水平最高的国际大学生程序设计竞赛,其目的旨在使大学生运用计算机来充分展示自己分析问题和解决问题的能力。该项竞赛从1970年举办至今已历29届,一直受到国际各知名大学的重视,并受到全世界各著名计算机公司的高度关注,在过去十几年中,APPLE、AT&T、MICROSOFT和IBM等世界著名信息企业分别担任了竞赛的赞助商。可以说,ACM国际大学生程序设计竞赛已成为世界各国大学生最具影响力的国际级计算机类的赛事,是广大爱好计算机编程的大学生展示才华的舞台,是著名大学计算机教育成果的直接体现,是信息企业与世界顶尖计算机人才对话的最好机会。

该项竞赛分区域预赛和国际决赛两个阶段进行,各预赛区第一名自动获得参加世界决赛的资格,世界决赛安排在每年的3~4月举行,而区域预赛安排在上一年的9~12月在各大洲举行。

ACM/ICPC的区域预赛是规模很大、范围很广的赛事。仅在2003年参加区域预赛的队伍就有来自75个国家(地区),1411所大学的3150支代表队,他们分别在127个赛场中进行比赛,以争夺全球总决赛的73个名额,其激烈程度可想而知。2005年第30届ACM/ICPC亚洲赛区预赛共设了北京、成都、汉城、东京等11个赛站,来自亚洲各国知名高校的各个代表队进行了激烈的角逐。

中国内地从1996年开始参加ACM/ICPC亚洲区预赛,至今已历九届。前六届赛区设在上海,由上海大学主办;2002年分设北京和西安赛区,分别由清华大学和西安交通大学主办;2003年设北京和广州赛区,分别由清华大学和中山大学主办。2004年设北京和上海赛区,分别由北京大学和上海交通大学举办。第30届ACM国际大学生程序设计竞赛亚洲区预选赛北京赛区比赛将由北京大学主办,定于2005年11月13日在北京大学举行。届时,来自全国各所著名高校的选手将云集北京大学,为争夺全球决赛名额进行一场高水平的程序设计角逐。

当今时代,计算机教育已经成为大学教育的一个极其重要的组成部分。北京大学一向十分重视ACM/ICPC竞赛在校园内的开展,将其作为学校迈向世界一流大学建设过程中的重点学生科技竞赛活动来组织实施。学校对本次竞赛的成功举办高度重视,成立了本届竞赛的领导小组,由北京大学林建华副校长亲自担任组长;同时,学校还成立了本届竞赛的组织委员会,由北京大学信息科学技术学院院长何新贵院士担任主任,并聘请了信息技术领域的多位院士担任评审委员会的顾问。

本次竞赛的参赛选手均是中国大学中的计算机顶尖人才,各所高校的教师以及参赛选手之间的交流将使其成为展示中国大学生计算机才华的良好机会和参赛学校加强合作、增进友谊的桥梁。相信通过我们的共同努力,本次竞赛必将成为中国计算机教育界的一次盛会,为中国计算机教育事业的发展作出更大贡献!

举办一次程序设计大赛 需要准备什么

不知道你大赛的规模,我们这里一般都有如下步骤:

1、成立大赛会务组(负责组织、协调、出题等工作)

2、由会务组组织专家制定比赛内容(考试大纲,比如有什么语言、比赛范围、比赛时间安排等)

3、确定比赛地点,安装相关的比赛环境(在比赛前3天准备)

4、由会务组随即抽取专家制定比赛题目(考试前一天准备)

5、组织比赛

6、由专家组对比赛结果进行评定

7、公布比赛结果

文章分享结束,程序设计大赛和全国大学生程序设计大赛的答案你都知道了吗?欢迎再次光临本站哦!

js和php哪个更实用,以后js好还是php好css滚动条事件(什么事件可以触发滚动条)