




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ACM竞赛宣讲会陈研数计学院团委学生会主办内容概要介绍ACM/ICPC及其赛制如何参加ACM队ACM竞赛涉及的知识如何准备首届福州大学程序设计竞赛试题讲解Question&Answer国际大学生程序设计竞赛ACMInternationalCollegiateProgrammingContest(ACM/ICPC)SponsoredbyIBM (AT&T,Microsoft,etc)RegionalContest 每年10,11,12月WorldFinals 次年3月底到4月初RegionalContestAsiaRegional Beijing,Bombay,Dhaka,Ehime,Kanpur-Kolkata,Manila,Seoul,Zhejiang,Sichuang,Taipei,Tehran下半年国内有3个赛区Beijing 北京大学Zhejiang 浙江大学Sichuang 四川大学Regional竞赛内容(1)参赛资格在读本科生,研一学生专业不限鼓励女选手参加比赛一个选手至多参加4年预选赛人员组成3个人组成一个队如果一个队伍有2个以上的女生,那么为女队 〔局部赛区要求3个都是女生〕设“最正确女队〞奖Regional竞赛内容(2)比赛形式1支队伍1台机器〔提供打印效劳〕上机编程解决问题〔可带纸质资料〕实时测试,动态排名试题6-10题全英文〔可以带字典〕时间:持续5个小时SampleProblemTask:Calculatea+bInput:Readfrom"sum.in"aseriesofpairsofintegersaandb,separatedbyaspace,onepairofintegersperline.Output:Foreachpairprintthesumofaandboneperlinetothescreen.sum.inOutput231556SampleSolution#include<iostream>#include<fstream>usingnamespacestd;intmain(){ inta,b; ifstreamfin(“sum.in〞); while(fin>>a>>b)cout<<a+b<<endl; return0;}评测方法TimeLimit对程序的要求程序执行所需要的时间要短 (TimeComplexity)程序执行所使用的内存要少 (SpaceComplexity)结果(Output)要完全正确ACM.vs.校程序设计竞赛ACM竞赛团队合作精神即时提交,通过所有数据才能得分全英文题目,题目考察范围广校程序设计竞赛个人编程能力的比拼赛后提交,可得局部分数中文题目,考察编程根本功福州大学ACM队选拔过程校程序设计竞赛数学根底笔试日常训练暑期集训福州大学ACM/ICPC队选拔赛(每年8月)ACM队队员的根本原那么根本要求人品好愿意花时间在这项赛事上有团队合作精神能力要求程序设计英语科技文献阅读数学相关的知识数学知识离散、组合数论、图论计算几何算法&数据结构根本数据结构搜索、分治动态规划贪心……Howtopractice?OnlineJudge://://OnlineContest3月20日网上热身赛13:00-21:00首届福州大学程序设计竞赛试题讲解解题的一般步骤理解题意,建立数学模型设计模型在计算机中表示的方法〔数据结构〕设计解决该问题的算法分析算法的时空效率编程实现测试程序的正确性和效率小结飞船赛N个飞船在直线跑道上比赛。每个飞船的起跑位置均不相同。第i个飞船从起跑线右边Xi(Xi<106)处开始向右行驶。比赛开始后,它能在零时间内加速到最大速度Vi(Vi<100)并永远保持此速度。比赛没有终点,即会永远进行下去。求比赛过程中发生几次超车。数学模型题目给了哪些数据?N个有序对(Xi,Vi)如何定义超车?i车将超过j车,当且仅当 Xi<Xj且Vi>Vj模型:求序列的逆序对数。注意题目的数据范围!why?数据结构原那么:选择的数据结构应能够高效的处理题目中涉及的根本运算。根本运算:判断超车。数据结构:将(Xi,Vi)存入数组中,即可根据超车的定义,直接求出答案。由于超车的判断只涉及Xi的大小关系,与具体取值无关,因此Xi可以不必存储,而用数组的下标代替Xi。intv[n];算法intv[n];intcount=0;for(i=0;i<n;i++) for(j=i+1;j<n;j++) if(v[i]>v[j])count++;运算量(n-1)+(n-2)+…+2+1=n(n-1)/2算法效率分析1<=N<=2.5*105运算量=n(n-1)/2=3.1*1010次1GHz=109次/秒解决该问题,本算法约需要半分钟。此题时限1秒!算法低效的原因:每次只能计算1个逆序对。算法优化——分治策略思想:将规模为n的问题分解为k个规模较小的子问题,这些子问题与原问题相互独立且与原问题相同,递归的解这些子问题,然后将子问题的解合并,得到原问题的解。典型例子:二分法难点:合并算法优化——分治策略思想:将n个元素分成大小大致相同的两个子序列,分别对2个子序列求逆序对数,再将2个子序列合并得到原序列的逆序对数。难点:如何合并?原序列逆序对数=2个子序列逆序对之和+满足V[i]>V[j](0<i<n/2+1,n/2<j<n+1)的数对数算法优化——分治策略满足V[i]>V[j](0<i<n/2+1,n/2<j<n+1)的数对数?如何计算?方法1:对每个i:while(v[i]>v[j++])…还是O(n2)的复杂度方法2:如果两个子序列是有序的……642531如何保证有序?边合并边排序即可例子6425316
425316
425
316
4
25
3
1逆序对=3逆序对=3排序:6逆序对=3+2排序:6,5逆序对=5+1排序:6,5,4,3,2,1654321更新原序列算法效率分析T(n)=2T(n/2)+O(n)用迭代法解该递推方程得T(n)=O(nlogn)计算量=nlogn=2.5*106log(2.5*106) =4.5*106效率提高的原因:充分利用有序性,每次可计算多个逆序对。如果想不到这种方法怎么办?另一种解法在一个问题无法得到解决时,就需要换一个角度看问题。切入点:1、尝试将逆序对问题转化为已有现成的算法的经典模型,即排序模型。2、尝试换一种数据结构,改变问题的表示方法往往能收到意想不到的效果。充分注意数据范围它能在零时间内加速到最大速度Vi
(Vi<100)其他的数据范围都很大,唯独这个数据范围很小,这个矛盾往往是解题的突破口。在现实问题,也往往存在这样现象,大家应该对此充分重视。Trade-off新的数据结构原来是用车的编号来表达问题。e.g.Vi>Vj,Xi<Xj,…能否考虑用速度的值来表示问题?num[v]:表示当前车之前速度为v的车有多少辆如何定义超车:车辆i能被超过的次数为算法intnum[100];intcount=0;memset(num,0,sizeof(num));for(i=0;i<n;i++){ cin>>x>>v; num[v]++; for(k=v+1;k<100;k++){ count+=num[k]; }运算量=O(nk)<2.5*107编制测试数据用手工可以检验的小数据,验证程序的正确性编写程序随机生成大数据,检验程序的执行效率〔使用随机函数〕注意检验边界条件。例如,此题中只有1辆车时算法能否得到正确结果。小结整个超车的过程实际上就是一个不断交换相邻元素的排序过程。这个排序方法就是冒泡法。因此超车次数就是冒泡法中元素一共要被交换的次数。通过两种算法的比较,我们可以看出归并排序比冒泡法效率高就是因为归并排序排一次操作可以减少多个逆序对。如果此题中Vi的规模进一步扩大,你能想出解决的方法吗?三色二叉树一棵二叉树可以按照如下规那么表示成一个由0、1、2组成的字符序列,我们称之为“二叉树序列S〞:对一棵二叉树的节点进行染色。每个节点可以被染成红色、绿色或蓝色。并且,一个节点与其子节点的颜色必须不同,如果该节点有两个子节点,那么这两个子节点的颜色也必须不相同。给定一棵二叉树的二叉树序列,请求出这棵树中最多和最少有多少个点能够被染成绿色。S=21200110数据结构二叉树的表示给二叉树上所有节点标号,从1~N;用Son[i][0]和Son[i][1]分别表示编号是i的节点,其左右两个子节点的编号〔如果不存在,那么用-1表示〕。如何将输入串转化为我们定义的数据结构?能否记录每个节点的父亲?建立数据结构intpl=0;voidbuild(){inti;if(pl<n){if(str[pl]=='0'){son[pl][0]=-1;son[pl][1]=-1;pl++;return;}if(str[pl]=='1'){son[pl][0]=pl+1;son[pl++][1]=-1;build();return;}/*str[pl]==‘2’*/son[pl][0]=pl+1;i=pl++;build();son[i][1]=pl;build();}}S=21200110搜索算法思想:穷举所有的合法着色方案,并计算每种方案的绿色节点数,从而求出最值。如何系统的、不遗漏的穷举所有方案?尝试找出问题的递归结构:设f(i,j)表示以编号是i、颜色是j的节点为根节点的子树,在满足约束条件的情况下染色,绿色节点最多〔最少〕有多少个。搜索算法F(i,j)表示以编号是i、颜色是j的节点为根节点的子树,在满足约束条件的情况下染色,绿色节点最多有多少个,那么有:源程序intmaximal(inti,intj){intk1,k2,t,m;if(i==-1)return0;m=-1;for(k1=0;k1<3;k1++)if(k1!=j)for(k2=0;k2<3;k2++)if(k2!=j&&k2!=k1){t=maximal(son[i][0],k1)+maximal(son[i][1],k2);if(t>m)m=t;}if(j==0)m++;returnm;}算法效率分析每个节点可以染3种颜色,最坏情况的计算量为O(3n)。n<10000本算法在几年之内无法得出结果!算法改进(1,red)(1,green)(0,blue)(2,blue)(2,green)(2,red)(2,blue)可以用一个数组记录下已经搜索过的子问题的答案,防止重复搜索记忆化搜索intmaximal(inti,intj){intk1,k2,t,m;if(i==-1)return0;
if(max[i][j]!=-1)returnmax[i][j];m=-1;for(k1=0;k1<3;k1++)if(k1!=j)for(k2=0;k2<3;k2++)if(k2!=j&&k2!=k1){t=maximal(son[i][0],k1)+maximal(son[i][1],k2);if(t>m)m=t;}if(j==0)m++;
max[i][j]=m;returnm;}复杂度分析:最坏情况是m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 在校学生实习表现证明及成果汇报(6篇)
- 棉被购销协议年
- 我和书的友谊写人作文9篇
- 读少年中国说后的启示议论文9篇
- 2025年茶艺师初级职业资格考试试卷
- 2025年安全工程师考试模拟试卷:安全生产标准化评审案例分析
- 2025年会计职称考试《初级会计实务》复盘强化错题精讲试题
- 2025年摩托车维修工(中级)考试试卷:摩托车维修行业政策解读与行业发展趋势分析
- 在成长的路上话题作文(7篇)
- 2025年场(厂)内专用机动车辆作业特种操作证考试实战技巧试题试卷
- 人教英语九年级单词表
- 北师大版五年级下册数学计算题每日一练带答案(共30天)
- 河南省建筑安全员《A证》考试题库
- 二零二五年度校方责任险赔偿协议书:校园食品安全事故责任赔偿合同
- 捷科医药物流管理系统(SCM)手册资料讲解
- 病理科生物安全培训
- 2025年立普妥行业深度研究分析报告-20241226-185650
- 家庭教育中的创客教育与孩子创新思维
- 《金融与科技创新协同发展探究的文献综述》3300字
- 新生儿科安全教育宣教
- 扶梯设备安全操作培训
评论
0/150
提交评论