.C++信息竞赛及算法第15讲 线性结构.pptxVIP

  • 4
  • 0
  • 约 14页
  • 2024-05-30 发布于广西
  • 举报
C++信息竞赛及算法第15讲线性结构.pptxC++信息竞赛及算法第15讲线性结构.pptx

学科竞赛编程教研研究院C++NOIPNOIIOI

题目背景要保护环境题目描述木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有剩余),需要得到的小段的数目是给定的。当然,我们希望得到的小段木头越长越好,你的任务是计算能够得到的小段木头的最大长度。木头长度的单位是cm。原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。例如有两根原木长度分别为11和21,要求切割成到等长的6段,很明显能切割出来的小段木头长度最长为5.木材加工

输入输出格式输入格式:第一行是两个正整数N和K(1≤N≤100000,1≤K≤100000000),N是原木的数目,K是需要得到的小段的数目。接下来的N行,每行有一个1到100000000之间的正整数,表示一根原木的长度。输出格式:能够切割得到的小段的最大长度。如果连1cm长的小段都切不出来,输出”0”。

输入输出样例

1PARTONEintcut(intl,intr){if(r=l)returnl;intmid=(r+l)/2+rand()%2;if(mid==0)return0;//如果小于一直接返回0if(pd(mid))returncut(mid,r);returncut(l,mid-1);}intmain(){cinnk;for(inti=1;i=n;i++){cina[i];sum+=a[i];}intr,l;r=sum/n;l=0;intans=cut(l,r);if(ans1)cout0;elsecoutans;return0;}#includebits/stdc++.husingnamespacestd;inta[100005];//存树intsum;//记录所有树加起来的总长度intn,k;//判断函数intpd(intx){intnum=0;for(inti=1;i=n;i++){num+=(a[i]/x);//注意是每根木头除以长度的和,//如果用总长度去求则可能有些木头过短需要丢掉,但是还是被算入其中if(num=k)returntrue;}returnfalse;}

题目背景在公元XXXX年,侦探小明收到了组织的神秘信息,在Y市的某个地方有一道神秘的门。小明到达了那个门后,发现门上有一行字:“这个门需要密码才能解锁。”小明左找右找,终于找到了一张字条:“现在给你n个数,请你求出这n个数里面,有多少个连续的数的平均数大于某个给定的数M?注意:这个数可能会很大,请输出这个数模的结果。最终的结果即是这个门的密码。”小明苦思冥想了半天,但始终找不到答案。于是他来求助于你。请你帮他解决这个问题。由于小明十分着急,他最多只能等1秒。题目描述给定n个数,请你帮助小明求出里面有多少个连续的数的平均数大于给定的某个数M.并将这个方案数输出。注意:这个数可能会很大,所以请输出这个数模的结果。神秘数字

输入格式:两行。第一行为两个数n和M。第二行为n个数。输出格式:一行一个数,即问题的解模的结果输入输出格式

输入输出样例

1PARTONEvoidmergesort(intl,intr){if(lr){intmid=(l+r)1;mergesort(l,mid);mergesort(mid+1,r);merge(l,mid,r);}}intmain(){scanf(%d%d,n,m);for(inti=1;i=n;i++){scanf(%d,a[i]);a[i]-=m;sum[i]=sum[i-1]+a[i];}mergesort(0,n);printf(%d\n,ans);return0;}#includeiostream#includecstdio#includecstring#includecstdlib#includealgorithmusingnamespacestd;inta[200010],sum[200010],ans,temp[200010];//sum为前缀和intn,m;intmer

文档评论(0)

1亿VIP精品文档

相关文档