noip信息学联赛模拟试题卷四.docx
《noip信息学联赛模拟试题卷四.docx》由会员分享,可在线阅读,更多相关《noip信息学联赛模拟试题卷四.docx(21页珍藏版)》请在冰豆网上搜索。
noip信息学联赛模拟试题卷四
第二十五届全国青少年信息学奥林匹克联赛初赛
(普及组C++语言试题)
竞赛时间:
2019年10月13日14:
30~16:
30
选手注意:
试题纸共有7页,答题纸共有2页,满分100分。
请在答题纸上作答,写在试题纸
上一律无效。
不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料
一.单项选择题(共20题,每题1.5分,共计30分。
每题有且仅有一个正确答案.)
1.(2019)12+(9102)16=:
A:
(1001100110100111)2B:
(116643)8C:
(9DA7)16D:
(9DA5)
16
2.图灵奖是信息学的最高奖项,以下获得过图灵奖的中国人是:
姚期智B:
姚期辉C:
马云D:
马化腾
3.国际信息学奥林匹克竞赛缩写是:
NOIB:
CTSCC:
IOID:
ACM
4.2.0E-3=
2000B:
0.002C:
8D:
-2000
5.计算2019>>6&1=
1B:
31C:
0D:
2019
6.使用二分算法在一个大小为n(n>=4)中寻找第4大的整数所需的时间复杂度为:
O
(1)B:
O(nlogn)C:
O(logn)D:
O(n)
7.若设函数f(x)=1(x=1,x=2)
3*f(sqrt(x))+f(x/2)+1(x>2)
当x=19时,计算过程中共调用的f(x)个数是(包括调用f
(1),f
(2)):
注释:
此处运算默认下取整
3B:
4C:
5D:
6
8.上题函数中f(19)=
30B:
37C:
36D:
39
9.第7题中的函数值不可以用以下哪种方法求得:
A:
动态规划B:
分治C:
递推D:
递归搜索
10.以下部件损坏,主机仍可正常工作的是:
内存条B:
硬盘C:
显示屏D:
显卡
11.对一下数据{1000,2,3,5,4,1,5000}进行冒泡排序,共计需交换次数为:
5
B:
10
C:
15
D:
18
12.如果将人体比作计算机,那么人体的记忆中枢相当于以下计算机部件的:
运算器B:
中央处理器C:
控制器D:
内存
13.以下示意图中的数据结构不属于选项中的哪个数据结构:
大根堆B:
无向图C:
连通图D:
完全二叉树
14.dos、unix和windows的共同点是:
都是硬件B:
都是联网系统软件C:
都是应用软件D:
都已经过
时
15.html是一种高级语言,以下操作可以查看html代码的是:
打开浏览器按F11B:
运行html.exe
无法查看D:
打开浏览器按F12
16.以下关于计算机病毒的说法正确的是:
防火墙可以防止感染B:
通过生物传播
一旦感染无法破解D:
计算机一次感染终身免疫
17.c++语言“实数下取整”操作是:
(int)xB:
float(x)C:
floor(x)D:
ceil(x)
18.一棵n层二叉树的最多节点数减去最少节点数等于:
2*nB:
2n-nC:
n2-nD:
n*log2(n)-n
19.现给出以下程序:
#include
usingnamespacestd;
inti,x;
inta[11]={0,10,2,3,5,14,8,20,1,7,-1};
intmain()
{
cin>>x;
sort(a+1,a+11);
for(i=1;i<=10;i++)
if(a[i]>=x)break;
cout<
}
问若将此程序的输入输出看做函数,则此函数的图像不经过点:
(0,2)B:
(2,4)C:
(11,9)D:
(21,11)
20.上题程序划线部分可替换为:
cout< B:cout< C:cout< D:cout< 二.问题求解(共2题,每题5分,共计10分) 1.五位数的卡布列克运算循环节为: 注释:卡布列克运算为将一数的所有数位数字重新排列可得的数的最大值减最小值(高 位补零),保证有循环节,本题有三个答案,写出一个即得5分,各数字用逗号隔开。 2.对于一棵勾股树(任一直角三角形三边均有与边长等长正方形重合,任一直角三角形 直角边为边长的正方形均与另一直角三角形斜边重合,如图),设所有最小正方形边长 为a[i](1≤i≤∞),则最大正方形面积为(1≤i≤∞) 三.阅读程序写结果(共4题,每题8分,共计32分) 1. #include usingnamespacestd; intmain() { inta,b,c; doubleans; cin>>a>>c; if(!c>>1<<1==c)c-=1; b=(a*c)/2; ans=sqrt(pow(b,3)); printf("%0.2f",ans); return0; } 输入:13 输出: 2. #include #include usingnamespacestd; intn,a[101],i; intmain() { cin>>n; for(i=1;i<=n;i++)cin>>a[i]; sort(a+1,a+n+1); n=unique(a+1,a+n+1)-a-1; cout< for(i=1;i<=n;i++)cout< cout< return0; } 输入:10 2040326740208930040015 输出: 3. #include usingnamespacestd; longlongo=1,minn=10000000,m; structpa{ longlongs; longlongj; stringn; longlongcost; }; pap[10005]; intmain() { while(cin>>p[o].s>>p[o].j>>p[o].n) o++; for(inti=1;i { for(intg=1;g p[i].cost+=abs(p[i].j-p[g].j)*p[g].s; if(p[i].cost<=minn) { minn=p[i].cost; m=i; } } cout< return0; } 输入:79289Vladivostok 58523Chabarovsk 35184Irkutsk 82213Yalutorovsk 100Moscow 输出: 4. #include usingnamespacestd; inta[500001],b[500001],i,n,A,B,l,r,mid; boolcheck(intmid) { intii,s=0; memcpy(b,a,sizeof(a)); for(ii=1;ii<=n;ii++)b[ii]-=mid*A; for(ii=1;ii<=n;ii++) if(b[ii]>0)s+=(int)ceil((double)b[ii]/B); returns<=mid; } intmain() { scanf("%d%d%d",&n,&A,&B); for(i=1;i<=n;i++)scanf("%d",&a[i]); l=0; r=500010; while(l { mid=(l+r)/2; if(check(mid))r=mid;elsel=mid+1; } printf("%d\n",l); } 输入: 1023 91031274815924 输出: 四.完善程序 (前8空,每空 2分,后4空,每空 3分,共28分)1.逆序对:逆序对的定义是:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i逆序对可以用冒泡排序和归并排序求得。试完善以下冒泡排序程序段与归并排序程序。 s=0; for(i=1;i<=n;i++) for(j=1;j<=(1);j++) if(a[j]>a[j+1]) { (2); ++s; } cout< ////////////////////////////////////////////////////////// #include usingnamespacestd; longlonga[500001],b[500001],s,n; voidguibing(longlongl,longlongr) { if(r-l==0)return; if(r-l==1) { if(a[r] { swap(a[r],a[l]);++s;}return;}longlongmid=(3)i=l,j=mid+1,k=l;guibing(l,mid);(4); while((5)) if(a[i]>a[j]) { s+=(6) b[k]=a[j]; ++k; ++j; } else { b[k]=a[i]; ++k; ++i; } for(;i<=mid;i++)b[k++]=a[i];for(;j<=r;j++)b[k++]=a[j]; for(k=l;k<=r;k++)(7); } intmain() { longlongi; scanf("%ld",&n); for(i=1;i<=n;i++)scanf("%ld",&a[i]); guibing(1,n); printf("%ld\n",s); return0; } 2.石子合并:在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规 定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得 分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. #include usingnamespacestd; constintMaxn=1000+10; intt[Maxn],dp1[Maxn][Maxn],dp2[Maxn][Maxn]; intmain(){ intn; cin>>n; for(inti=1;i<=n;++i){ cin>>t[i]; t[(1)]=t[i];} for(inti=2;i<=2*n;++i)t[i]+=t[i-1]; memset(dp1,0,sizeof(dp1)); for(inti=2*n-1;(2)) for(intj=(3);j<=2*n;++j) {intb=2147483647; for(intk=i;k dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+t[j]-t[i-1]); b=min(b,(4));} dp2[i][j]=b;} intmax0=0,min0=10000000; for(inti=1;i<=n;++i){ max0=max((5)); min0=min(min0,dp2[i][i+n-1]);} cout< return0; }CCFNOIP2019普及组(C++语言)参考答案与评分标准 一、单项选择题(共20题,每题1.5分,共计30分)12345678910CACBADDBBC 11121314151617181920 BDACDACBBD 二、问题求解(共2题,每题5分,共计10分) 1.答案为:(任答其一即可) ①59994,53955②:74943,62964,71973,83952③: 61974,82962,75933,63954 2.a[1]2+a[2]2+⋯⋯+a[∞]2或∑a[i]2 三、阅读程序写结果(共4题,每题8分,共计32分) 1.1.00 2.8 152032406789300400 3.Yalutorovsk112125 4.6 四、完善程序(第1题,每空2分,第2题,每空3分,共计28分)(说明:以下各 程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1.(1)n-1 (2)swap(a[j],a[j+1]); (3)(l+r)/2 (4)guibing(mid+1,r); (5)i<=mid&&j<=r (6)mid-i+1; (7)a[k]=b[k]; 2.(1)i+n (2)i>=1;--i (3)i+1 (4)dp2[i][k]+dp2[k+1][j]+t[j]-t[i-1] (5)max0,dp1[i][i+n-1] 您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。专业资料学习资料教育培训考试建筑装潢资料
cout< C:cout< D:cout< 二.问题求解(共2题,每题5分,共计10分) 1.五位数的卡布列克运算循环节为: 注释:卡布列克运算为将一数的所有数位数字重新排列可得的数的最大值减最小值(高 位补零),保证有循环节,本题有三个答案,写出一个即得5分,各数字用逗号隔开。 2.对于一棵勾股树(任一直角三角形三边均有与边长等长正方形重合,任一直角三角形 直角边为边长的正方形均与另一直角三角形斜边重合,如图),设所有最小正方形边长 为a[i](1≤i≤∞),则最大正方形面积为(1≤i≤∞) 三.阅读程序写结果(共4题,每题8分,共计32分) 1. #include usingnamespacestd; intmain() { inta,b,c; doubleans; cin>>a>>c; if(!c>>1<<1==c)c-=1; b=(a*c)/2; ans=sqrt(pow(b,3)); printf("%0.2f",ans); return0; } 输入:13 输出: 2. #include #include usingnamespacestd; intn,a[101],i; intmain() { cin>>n; for(i=1;i<=n;i++)cin>>a[i]; sort(a+1,a+n+1); n=unique(a+1,a+n+1)-a-1; cout< for(i=1;i<=n;i++)cout< cout< return0; } 输入:10 2040326740208930040015 输出: 3. #include usingnamespacestd; longlongo=1,minn=10000000,m; structpa{ longlongs; longlongj; stringn; longlongcost; }; pap[10005]; intmain() { while(cin>>p[o].s>>p[o].j>>p[o].n) o++; for(inti=1;i { for(intg=1;g p[i].cost+=abs(p[i].j-p[g].j)*p[g].s; if(p[i].cost<=minn) { minn=p[i].cost; m=i; } } cout< return0; } 输入:79289Vladivostok 58523Chabarovsk 35184Irkutsk 82213Yalutorovsk 100Moscow 输出: 4. #include usingnamespacestd; inta[500001],b[500001],i,n,A,B,l,r,mid; boolcheck(intmid) { intii,s=0; memcpy(b,a,sizeof(a)); for(ii=1;ii<=n;ii++)b[ii]-=mid*A; for(ii=1;ii<=n;ii++) if(b[ii]>0)s+=(int)ceil((double)b[ii]/B); returns<=mid; } intmain() { scanf("%d%d%d",&n,&A,&B); for(i=1;i<=n;i++)scanf("%d",&a[i]); l=0; r=500010; while(l { mid=(l+r)/2; if(check(mid))r=mid;elsel=mid+1; } printf("%d\n",l); } 输入: 1023 91031274815924 输出: 四.完善程序 (前8空,每空 2分,后4空,每空 3分,共28分)1.逆序对:逆序对的定义是:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i逆序对可以用冒泡排序和归并排序求得。试完善以下冒泡排序程序段与归并排序程序。 s=0; for(i=1;i<=n;i++) for(j=1;j<=(1);j++) if(a[j]>a[j+1]) { (2); ++s; } cout< ////////////////////////////////////////////////////////// #include usingnamespacestd; longlonga[500001],b[500001],s,n; voidguibing(longlongl,longlongr) { if(r-l==0)return; if(r-l==1) { if(a[r] { swap(a[r],a[l]);++s;}return;}longlongmid=(3)i=l,j=mid+1,k=l;guibing(l,mid);(4); while((5)) if(a[i]>a[j]) { s+=(6) b[k]=a[j]; ++k; ++j; } else { b[k]=a[i]; ++k; ++i; } for(;i<=mid;i++)b[k++]=a[i];for(;j<=r;j++)b[k++]=a[j]; for(k=l;k<=r;k++)(7); } intmain() { longlongi; scanf("%ld",&n); for(i=1;i<=n;i++)scanf("%ld",&a[i]); guibing(1,n); printf("%ld\n",s); return0; } 2.石子合并:在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规 定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得 分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. #include usingnamespacestd; constintMaxn=1000+10; intt[Maxn],dp1[Maxn][Maxn],dp2[Maxn][Maxn]; intmain(){ intn; cin>>n; for(inti=1;i<=n;++i){ cin>>t[i]; t[(1)]=t[i];} for(inti=2;i<=2*n;++i)t[i]+=t[i-1]; memset(dp1,0,sizeof(dp1)); for(inti=2*n-1;(2)) for(intj=(3);j<=2*n;++j) {intb=2147483647; for(intk=i;k dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+t[j]-t[i-1]); b=min(b,(4));} dp2[i][j]=b;} intmax0=0,min0=10000000; for(inti=1;i<=n;++i){ max0=max((5)); min0=min(min0,dp2[i][i+n-1]);} cout< return0; }CCFNOIP2019普及组(C++语言)参考答案与评分标准 一、单项选择题(共20题,每题1.5分,共计30分)12345678910CACBADDBBC 11121314151617181920 BDACDACBBD 二、问题求解(共2题,每题5分,共计10分) 1.答案为:(任答其一即可) ①59994,53955②:74943,62964,71973,83952③: 61974,82962,75933,63954 2.a[1]2+a[2]2+⋯⋯+a[∞]2或∑a[i]2 三、阅读程序写结果(共4题,每题8分,共计32分) 1.1.00 2.8 152032406789300400 3.Yalutorovsk112125 4.6 四、完善程序(第1题,每空2分,第2题,每空3分,共计28分)(说明:以下各 程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1.(1)n-1 (2)swap(a[j],a[j+1]); (3)(l+r)/2 (4)guibing(mid+1,r); (5)i<=mid&&j<=r (6)mid-i+1; (7)a[k]=b[k]; 2.(1)i+n (2)i>=1;--i (3)i+1 (4)dp2[i][k]+dp2[k+1][j]+t[j]-t[i-1] (5)max0,dp1[i][i+n-1] 您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。专业资料学习资料教育培训考试建筑装潢资料
cout< D:cout< 二.问题求解(共2题,每题5分,共计10分) 1.五位数的卡布列克运算循环节为: 注释:卡布列克运算为将一数的所有数位数字重新排列可得的数的最大值减最小值(高 位补零),保证有循环节,本题有三个答案,写出一个即得5分,各数字用逗号隔开。 2.对于一棵勾股树(任一直角三角形三边均有与边长等长正方形重合,任一直角三角形 直角边为边长的正方形均与另一直角三角形斜边重合,如图),设所有最小正方形边长 为a[i](1≤i≤∞),则最大正方形面积为(1≤i≤∞) 三.阅读程序写结果(共4题,每题8分,共计32分) 1. #include usingnamespacestd; intmain() { inta,b,c; doubleans; cin>>a>>c; if(!c>>1<<1==c)c-=1; b=(a*c)/2; ans=sqrt(pow(b,3)); printf("%0.2f",ans); return0; } 输入:13 输出: 2. #include #include usingnamespacestd; intn,a[101],i; intmain() { cin>>n; for(i=1;i<=n;i++)cin>>a[i]; sort(a+1,a+n+1); n=unique(a+1,a+n+1)-a-1; cout< for(i=1;i<=n;i++)cout< cout< return0; } 输入:10 2040326740208930040015 输出: 3. #include usingnamespacestd; longlongo=1,minn=10000000,m; structpa{ longlongs; longlongj; stringn; longlongcost; }; pap[10005]; intmain() { while(cin>>p[o].s>>p[o].j>>p[o].n) o++; for(inti=1;i { for(intg=1;g p[i].cost+=abs(p[i].j-p[g].j)*p[g].s; if(p[i].cost<=minn) { minn=p[i].cost; m=i; } } cout< return0; } 输入:79289Vladivostok 58523Chabarovsk 35184Irkutsk 82213Yalutorovsk 100Moscow 输出: 4. #include usingnamespacestd; inta[500001],b[500001],i,n,A,B,l,r,mid; boolcheck(intmid) { intii,s=0; memcpy(b,a,sizeof(a)); for(ii=1;ii<=n;ii++)b[ii]-=mid*A; for(ii=1;ii<=n;ii++) if(b[ii]>0)s+=(int)ceil((double)b[ii]/B); returns<=mid; } intmain() { scanf("%d%d%d",&n,&A,&B); for(i=1;i<=n;i++)scanf("%d",&a[i]); l=0; r=500010; while(l { mid=(l+r)/2; if(check(mid))r=mid;elsel=mid+1; } printf("%d\n",l); } 输入: 1023 91031274815924 输出: 四.完善程序 (前8空,每空 2分,后4空,每空 3分,共28分)1.逆序对:逆序对的定义是:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i逆序对可以用冒泡排序和归并排序求得。试完善以下冒泡排序程序段与归并排序程序。 s=0; for(i=1;i<=n;i++) for(j=1;j<=(1);j++) if(a[j]>a[j+1]) { (2); ++s; } cout< ////////////////////////////////////////////////////////// #include usingnamespacestd; longlonga[500001],b[500001],s,n; voidguibing(longlongl,longlongr) { if(r-l==0)return; if(r-l==1) { if(a[r] { swap(a[r],a[l]);++s;}return;}longlongmid=(3)i=l,j=mid+1,k=l;guibing(l,mid);(4); while((5)) if(a[i]>a[j]) { s+=(6) b[k]=a[j]; ++k; ++j; } else { b[k]=a[i]; ++k; ++i; } for(;i<=mid;i++)b[k++]=a[i];for(;j<=r;j++)b[k++]=a[j]; for(k=l;k<=r;k++)(7); } intmain() { longlongi; scanf("%ld",&n); for(i=1;i<=n;i++)scanf("%ld",&a[i]); guibing(1,n); printf("%ld\n",s); return0; } 2.石子合并:在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规 定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得 分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. #include usingnamespacestd; constintMaxn=1000+10; intt[Maxn],dp1[Maxn][Maxn],dp2[Maxn][Maxn]; intmain(){ intn; cin>>n; for(inti=1;i<=n;++i){ cin>>t[i]; t[(1)]=t[i];} for(inti=2;i<=2*n;++i)t[i]+=t[i-1]; memset(dp1,0,sizeof(dp1)); for(inti=2*n-1;(2)) for(intj=(3);j<=2*n;++j) {intb=2147483647; for(intk=i;k dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+t[j]-t[i-1]); b=min(b,(4));} dp2[i][j]=b;} intmax0=0,min0=10000000; for(inti=1;i<=n;++i){ max0=max((5)); min0=min(min0,dp2[i][i+n-1]);} cout< return0; }CCFNOIP2019普及组(C++语言)参考答案与评分标准 一、单项选择题(共20题,每题1.5分,共计30分)12345678910CACBADDBBC 11121314151617181920 BDACDACBBD 二、问题求解(共2题,每题5分,共计10分) 1.答案为:(任答其一即可) ①59994,53955②:74943,62964,71973,83952③: 61974,82962,75933,63954 2.a[1]2+a[2]2+⋯⋯+a[∞]2或∑a[i]2 三、阅读程序写结果(共4题,每题8分,共计32分) 1.1.00 2.8 152032406789300400 3.Yalutorovsk112125 4.6 四、完善程序(第1题,每空2分,第2题,每空3分,共计28分)(说明:以下各 程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1.(1)n-1 (2)swap(a[j],a[j+1]); (3)(l+r)/2 (4)guibing(mid+1,r); (5)i<=mid&&j<=r (6)mid-i+1; (7)a[k]=b[k]; 2.(1)i+n (2)i>=1;--i (3)i+1 (4)dp2[i][k]+dp2[k+1][j]+t[j]-t[i-1] (5)max0,dp1[i][i+n-1] 您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。专业资料学习资料教育培训考试建筑装潢资料
D:
cout< 二.问题求解(共2题,每题5分,共计10分) 1.五位数的卡布列克运算循环节为: 注释:卡布列克运算为将一数的所有数位数字重新排列可得的数的最大值减最小值(高 位补零),保证有循环节,本题有三个答案,写出一个即得5分,各数字用逗号隔开。 2.对于一棵勾股树(任一直角三角形三边均有与边长等长正方形重合,任一直角三角形 直角边为边长的正方形均与另一直角三角形斜边重合,如图),设所有最小正方形边长 为a[i](1≤i≤∞),则最大正方形面积为(1≤i≤∞) 三.阅读程序写结果(共4题,每题8分,共计32分) 1. #include usingnamespacestd; intmain() { inta,b,c; doubleans; cin>>a>>c; if(!c>>1<<1==c)c-=1; b=(a*c)/2; ans=sqrt(pow(b,3)); printf("%0.2f",ans); return0; } 输入:13 输出: 2. #include #include usingnamespacestd; intn,a[101],i; intmain() { cin>>n; for(i=1;i<=n;i++)cin>>a[i]; sort(a+1,a+n+1); n=unique(a+1,a+n+1)-a-1; cout< for(i=1;i<=n;i++)cout< cout< return0; } 输入:10 2040326740208930040015 输出: 3. #include usingnamespacestd; longlongo=1,minn=10000000,m; structpa{ longlongs; longlongj; stringn; longlongcost; }; pap[10005]; intmain() { while(cin>>p[o].s>>p[o].j>>p[o].n) o++; for(inti=1;i { for(intg=1;g p[i].cost+=abs(p[i].j-p[g].j)*p[g].s; if(p[i].cost<=minn) { minn=p[i].cost; m=i; } } cout< return0; } 输入:79289Vladivostok 58523Chabarovsk 35184Irkutsk 82213Yalutorovsk 100Moscow 输出: 4. #include usingnamespacestd; inta[500001],b[500001],i,n,A,B,l,r,mid; boolcheck(intmid) { intii,s=0; memcpy(b,a,sizeof(a)); for(ii=1;ii<=n;ii++)b[ii]-=mid*A; for(ii=1;ii<=n;ii++) if(b[ii]>0)s+=(int)ceil((double)b[ii]/B); returns<=mid; } intmain() { scanf("%d%d%d",&n,&A,&B); for(i=1;i<=n;i++)scanf("%d",&a[i]); l=0; r=500010; while(l { mid=(l+r)/2; if(check(mid))r=mid;elsel=mid+1; } printf("%d\n",l); } 输入: 1023 91031274815924 输出: 四.完善程序 (前8空,每空 2分,后4空,每空 3分,共28分)1.逆序对:逆序对的定义是:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i逆序对可以用冒泡排序和归并排序求得。试完善以下冒泡排序程序段与归并排序程序。 s=0; for(i=1;i<=n;i++) for(j=1;j<=(1);j++) if(a[j]>a[j+1]) { (2); ++s; } cout< ////////////////////////////////////////////////////////// #include usingnamespacestd; longlonga[500001],b[500001],s,n; voidguibing(longlongl,longlongr) { if(r-l==0)return; if(r-l==1) { if(a[r] { swap(a[r],a[l]);++s;}return;}longlongmid=(3)i=l,j=mid+1,k=l;guibing(l,mid);(4); while((5)) if(a[i]>a[j]) { s+=(6) b[k]=a[j]; ++k; ++j; } else { b[k]=a[i]; ++k; ++i; } for(;i<=mid;i++)b[k++]=a[i];for(;j<=r;j++)b[k++]=a[j]; for(k=l;k<=r;k++)(7); } intmain() { longlongi; scanf("%ld",&n); for(i=1;i<=n;i++)scanf("%ld",&a[i]); guibing(1,n); printf("%ld\n",s); return0; } 2.石子合并:在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规 定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得 分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. #include usingnamespacestd; constintMaxn=1000+10; intt[Maxn],dp1[Maxn][Maxn],dp2[Maxn][Maxn]; intmain(){ intn; cin>>n; for(inti=1;i<=n;++i){ cin>>t[i]; t[(1)]=t[i];} for(inti=2;i<=2*n;++i)t[i]+=t[i-1]; memset(dp1,0,sizeof(dp1)); for(inti=2*n-1;(2)) for(intj=(3);j<=2*n;++j) {intb=2147483647; for(intk=i;k dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+t[j]-t[i-1]); b=min(b,(4));} dp2[i][j]=b;} intmax0=0,min0=10000000; for(inti=1;i<=n;++i){ max0=max((5)); min0=min(min0,dp2[i][i+n-1]);} cout< return0; }CCFNOIP2019普及组(C++语言)参考答案与评分标准 一、单项选择题(共20题,每题1.5分,共计30分)12345678910CACBADDBBC 11121314151617181920 BDACDACBBD 二、问题求解(共2题,每题5分,共计10分) 1.答案为:(任答其一即可) ①59994,53955②:74943,62964,71973,83952③: 61974,82962,75933,63954 2.a[1]2+a[2]2+⋯⋯+a[∞]2或∑a[i]2 三、阅读程序写结果(共4题,每题8分,共计32分) 1.1.00 2.8 152032406789300400 3.Yalutorovsk112125 4.6 四、完善程序(第1题,每空2分,第2题,每空3分,共计28分)(说明:以下各 程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1.(1)n-1 (2)swap(a[j],a[j+1]); (3)(l+r)/2 (4)guibing(mid+1,r); (5)i<=mid&&j<=r (6)mid-i+1; (7)a[k]=b[k]; 2.(1)i+n (2)i>=1;--i (3)i+1 (4)dp2[i][k]+dp2[k+1][j]+t[j]-t[i-1] (5)max0,dp1[i][i+n-1] 您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。专业资料学习资料教育培训考试建筑装潢资料
二.问题求解(共2题,每题5分,共计10分)
1.五位数的卡布列克运算循环节为:
卡布列克运算为将一数的所有数位数字重新排列可得的数的最大值减最小值(高
位补零),保证有循环节,本题有三个答案,写出一个即得5分,各数字用逗号隔开。
2.对于一棵勾股树(任一直角三角形三边均有与边长等长正方形重合,任一直角三角形
直角边为边长的正方形均与另一直角三角形斜边重合,如图),设所有最小正方形边长
为a[i](1≤i≤∞),则最大正方形面积为(1≤i≤∞)
三.阅读程序写结果(共4题,每题8分,共计32分)
1.
inta,b,c;
doubleans;
cin>>a>>c;
if(!
c>>1<<1==c)c-=1;
b=(a*c)/2;
ans=sqrt(pow(b,3));
printf("%0.2f",ans);
return0;
输入:
13
输出:
2.
intn,a[101],i;
cin>>n;
for(i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+n+1);
n=unique(a+1,a+n+1)-a-1;
cout< for(i=1;i<=n;i++)cout< cout< return0; } 输入:10 2040326740208930040015 输出: 3. #include usingnamespacestd; longlongo=1,minn=10000000,m; structpa{ longlongs; longlongj; stringn; longlongcost; }; pap[10005]; intmain() { while(cin>>p[o].s>>p[o].j>>p[o].n) o++; for(inti=1;i { for(intg=1;g p[i].cost+=abs(p[i].j-p[g].j)*p[g].s; if(p[i].cost<=minn) { minn=p[i].cost; m=i; } } cout< return0; } 输入:79289Vladivostok 58523Chabarovsk 35184Irkutsk 82213Yalutorovsk 100Moscow 输出: 4. #include usingnamespacestd; inta[500001],b[500001],i,n,A,B,l,r,mid; boolcheck(intmid) { intii,s=0; memcpy(b,a,sizeof(a)); for(ii=1;ii<=n;ii++)b[ii]-=mid*A; for(ii=1;ii<=n;ii++) if(b[ii]>0)s+=(int)ceil((double)b[ii]/B); returns<=mid; } intmain() { scanf("%d%d%d",&n,&A,&B); for(i=1;i<=n;i++)scanf("%d",&a[i]); l=0; r=500010; while(l { mid=(l+r)/2; if(check(mid))r=mid;elsel=mid+1; } printf("%d\n",l); } 输入: 1023 91031274815924 输出: 四.完善程序 (前8空,每空 2分,后4空,每空 3分,共28分)1.逆序对:逆序对的定义是:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i逆序对可以用冒泡排序和归并排序求得。试完善以下冒泡排序程序段与归并排序程序。 s=0; for(i=1;i<=n;i++) for(j=1;j<=(1);j++) if(a[j]>a[j+1]) { (2); ++s; } cout< ////////////////////////////////////////////////////////// #include usingnamespacestd; longlonga[500001],b[500001],s,n; voidguibing(longlongl,longlongr) { if(r-l==0)return; if(r-l==1) { if(a[r] { swap(a[r],a[l]);++s;}return;}longlongmid=(3)i=l,j=mid+1,k=l;guibing(l,mid);(4); while((5)) if(a[i]>a[j]) { s+=(6) b[k]=a[j]; ++k; ++j; } else { b[k]=a[i]; ++k; ++i; } for(;i<=mid;i++)b[k++]=a[i];for(;j<=r;j++)b[k++]=a[j]; for(k=l;k<=r;k++)(7); } intmain() { longlongi; scanf("%ld",&n); for(i=1;i<=n;i++)scanf("%ld",&a[i]); guibing(1,n); printf("%ld\n",s); return0; } 2.石子合并:在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规 定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得 分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. #include usingnamespacestd; constintMaxn=1000+10; intt[Maxn],dp1[Maxn][Maxn],dp2[Maxn][Maxn]; intmain(){ intn; cin>>n; for(inti=1;i<=n;++i){ cin>>t[i]; t[(1)]=t[i];} for(inti=2;i<=2*n;++i)t[i]+=t[i-1]; memset(dp1,0,sizeof(dp1)); for(inti=2*n-1;(2)) for(intj=(3);j<=2*n;++j) {intb=2147483647; for(intk=i;k dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+t[j]-t[i-1]); b=min(b,(4));} dp2[i][j]=b;} intmax0=0,min0=10000000; for(inti=1;i<=n;++i){ max0=max((5)); min0=min(min0,dp2[i][i+n-1]);} cout< return0; }CCFNOIP2019普及组(C++语言)参考答案与评分标准 一、单项选择题(共20题,每题1.5分,共计30分)12345678910CACBADDBBC 11121314151617181920 BDACDACBBD 二、问题求解(共2题,每题5分,共计10分) 1.答案为:(任答其一即可) ①59994,53955②:74943,62964,71973,83952③: 61974,82962,75933,63954 2.a[1]2+a[2]2+⋯⋯+a[∞]2或∑a[i]2 三、阅读程序写结果(共4题,每题8分,共计32分) 1.1.00 2.8 152032406789300400 3.Yalutorovsk112125 4.6 四、完善程序(第1题,每空2分,第2题,每空3分,共计28分)(说明:以下各 程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1.(1)n-1 (2)swap(a[j],a[j+1]); (3)(l+r)/2 (4)guibing(mid+1,r); (5)i<=mid&&j<=r (6)mid-i+1; (7)a[k]=b[k]; 2.(1)i+n (2)i>=1;--i (3)i+1 (4)dp2[i][k]+dp2[k+1][j]+t[j]-t[i-1] (5)max0,dp1[i][i+n-1] 您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。专业资料学习资料教育培训考试建筑装潢资料
for(i=1;i<=n;i++)cout< cout< return0; } 输入:10 2040326740208930040015 输出: 3. #include usingnamespacestd; longlongo=1,minn=10000000,m; structpa{ longlongs; longlongj; stringn; longlongcost; }; pap[10005]; intmain() { while(cin>>p[o].s>>p[o].j>>p[o].n) o++; for(inti=1;i { for(intg=1;g p[i].cost+=abs(p[i].j-p[g].j)*p[g].s; if(p[i].cost<=minn) { minn=p[i].cost; m=i; } } cout< return0; } 输入:79289Vladivostok 58523Chabarovsk 35184Irkutsk 82213Yalutorovsk 100Moscow 输出: 4. #include usingnamespacestd; inta[500001],b[500001],i,n,A,B,l,r,mid; boolcheck(intmid) { intii,s=0; memcpy(b,a,sizeof(a)); for(ii=1;ii<=n;ii++)b[ii]-=mid*A; for(ii=1;ii<=n;ii++) if(b[ii]>0)s+=(int)ceil((double)b[ii]/B); returns<=mid; } intmain() { scanf("%d%d%d",&n,&A,&B); for(i=1;i<=n;i++)scanf("%d",&a[i]); l=0; r=500010; while(l { mid=(l+r)/2; if(check(mid))r=mid;elsel=mid+1; } printf("%d\n",l); } 输入: 1023 91031274815924 输出: 四.完善程序 (前8空,每空 2分,后4空,每空 3分,共28分)1.逆序对:逆序对的定义是:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i逆序对可以用冒泡排序和归并排序求得。试完善以下冒泡排序程序段与归并排序程序。 s=0; for(i=1;i<=n;i++) for(j=1;j<=(1);j++) if(a[j]>a[j+1]) { (2); ++s; } cout< ////////////////////////////////////////////////////////// #include usingnamespacestd; longlonga[500001],b[500001],s,n; voidguibing(longlongl,longlongr) { if(r-l==0)return; if(r-l==1) { if(a[r] { swap(a[r],a[l]);++s;}return;}longlongmid=(3)i=l,j=mid+1,k=l;guibing(l,mid);(4); while((5)) if(a[i]>a[j]) { s+=(6) b[k]=a[j]; ++k; ++j; } else { b[k]=a[i]; ++k; ++i; } for(;i<=mid;i++)b[k++]=a[i];for(;j<=r;j++)b[k++]=a[j]; for(k=l;k<=r;k++)(7); } intmain() { longlongi; scanf("%ld",&n); for(i=1;i<=n;i++)scanf("%ld",&a[i]); guibing(1,n); printf("%ld\n",s); return0; } 2.石子合并:在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规 定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得 分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. #include usingnamespacestd; constintMaxn=1000+10; intt[Maxn],dp1[Maxn][Maxn],dp2[Maxn][Maxn]; intmain(){ intn; cin>>n; for(inti=1;i<=n;++i){ cin>>t[i]; t[(1)]=t[i];} for(inti=2;i<=2*n;++i)t[i]+=t[i-1]; memset(dp1,0,sizeof(dp1)); for(inti=2*n-1;(2)) for(intj=(3);j<=2*n;++j) {intb=2147483647; for(intk=i;k dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+t[j]-t[i-1]); b=min(b,(4));} dp2[i][j]=b;} intmax0=0,min0=10000000; for(inti=1;i<=n;++i){ max0=max((5)); min0=min(min0,dp2[i][i+n-1]);} cout< return0; }CCFNOIP2019普及组(C++语言)参考答案与评分标准 一、单项选择题(共20题,每题1.5分,共计30分)12345678910CACBADDBBC 11121314151617181920 BDACDACBBD 二、问题求解(共2题,每题5分,共计10分) 1.答案为:(任答其一即可) ①59994,53955②:74943,62964,71973,83952③: 61974,82962,75933,63954 2.a[1]2+a[2]2+⋯⋯+a[∞]2或∑a[i]2 三、阅读程序写结果(共4题,每题8分,共计32分) 1.1.00 2.8 152032406789300400 3.Yalutorovsk112125 4.6 四、完善程序(第1题,每空2分,第2题,每空3分,共计28分)(说明:以下各 程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1.(1)n-1 (2)swap(a[j],a[j+1]); (3)(l+r)/2 (4)guibing(mid+1,r); (5)i<=mid&&j<=r (6)mid-i+1; (7)a[k]=b[k]; 2.(1)i+n (2)i>=1;--i (3)i+1 (4)dp2[i][k]+dp2[k+1][j]+t[j]-t[i-1] (5)max0,dp1[i][i+n-1] 您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。专业资料学习资料教育培训考试建筑装潢资料
cout< return0; } 输入:10 2040326740208930040015 输出: 3. #include usingnamespacestd; longlongo=1,minn=10000000,m; structpa{ longlongs; longlongj; stringn; longlongcost; }; pap[10005]; intmain() { while(cin>>p[o].s>>p[o].j>>p[o].n) o++; for(inti=1;i { for(intg=1;g p[i].cost+=abs(p[i].j-p[g].j)*p[g].s; if(p[i].cost<=minn) { minn=p[i].cost; m=i; } } cout< return0; } 输入:79289Vladivostok 58523Chabarovsk 35184Irkutsk 82213Yalutorovsk 100Moscow 输出: 4. #include usingnamespacestd; inta[500001],b[500001],i,n,A,B,l,r,mid; boolcheck(intmid) { intii,s=0; memcpy(b,a,sizeof(a)); for(ii=1;ii<=n;ii++)b[ii]-=mid*A; for(ii=1;ii<=n;ii++) if(b[ii]>0)s+=(int)ceil((double)b[ii]/B); returns<=mid; } intmain() { scanf("%d%d%d",&n,&A,&B); for(i=1;i<=n;i++)scanf("%d",&a[i]); l=0; r=500010; while(l { mid=(l+r)/2; if(check(mid))r=mid;elsel=mid+1; } printf("%d\n",l); } 输入: 1023 91031274815924 输出: 四.完善程序 (前8空,每空 2分,后4空,每空 3分,共28分)1.逆序对:逆序对的定义是:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i逆序对可以用冒泡排序和归并排序求得。试完善以下冒泡排序程序段与归并排序程序。 s=0; for(i=1;i<=n;i++) for(j=1;j<=(1);j++) if(a[j]>a[j+1]) { (2); ++s; } cout< ////////////////////////////////////////////////////////// #include usingnamespacestd; longlonga[500001],b[500001],s,n; voidguibing(longlongl,longlongr) { if(r-l==0)return; if(r-l==1) { if(a[r] { swap(a[r],a[l]);++s;}return;}longlongmid=(3)i=l,j=mid+1,k=l;guibing(l,mid);(4); while((5)) if(a[i]>a[j]) { s+=(6) b[k]=a[j]; ++k; ++j; } else { b[k]=a[i]; ++k; ++i; } for(;i<=mid;i++)b[k++]=a[i];for(;j<=r;j++)b[k++]=a[j]; for(k=l;k<=r;k++)(7); } intmain() { longlongi; scanf("%ld",&n); for(i=1;i<=n;i++)scanf("%ld",&a[i]); guibing(1,n); printf("%ld\n",s); return0; } 2.石子合并:在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规 定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得 分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. #include usingnamespacestd; constintMaxn=1000+10; intt[Maxn],dp1[Maxn][Maxn],dp2[Maxn][Maxn]; intmain(){ intn; cin>>n; for(inti=1;i<=n;++i){ cin>>t[i]; t[(1)]=t[i];} for(inti=2;i<=2*n;++i)t[i]+=t[i-1]; memset(dp1,0,sizeof(dp1)); for(inti=2*n-1;(2)) for(intj=(3);j<=2*n;++j) {intb=2147483647; for(intk=i;k dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+t[j]-t[i-1]); b=min(b,(4));} dp2[i][j]=b;} intmax0=0,min0=10000000; for(inti=1;i<=n;++i){ max0=max((5)); min0=min(min0,dp2[i][i+n-1]);} cout< return0; }CCFNOIP2019普及组(C++语言)参考答案与评分标准 一、单项选择题(共20题,每题1.5分,共计30分)12345678910CACBADDBBC 11121314151617181920 BDACDACBBD 二、问题求解(共2题,每题5分,共计10分) 1.答案为:(任答其一即可) ①59994,53955②:74943,62964,71973,83952③: 61974,82962,75933,63954 2.a[1]2+a[2]2+⋯⋯+a[∞]2或∑a[i]2 三、阅读程序写结果(共4题,每题8分,共计32分) 1.1.00 2.8 152032406789300400 3.Yalutorovsk112125 4.6 四、完善程序(第1题,每空2分,第2题,每空3分,共计28分)(说明:以下各 程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1.(1)n-1 (2)swap(a[j],a[j+1]); (3)(l+r)/2 (4)guibing(mid+1,r); (5)i<=mid&&j<=r (6)mid-i+1; (7)a[k]=b[k]; 2.(1)i+n (2)i>=1;--i (3)i+1 (4)dp2[i][k]+dp2[k+1][j]+t[j]-t[i-1] (5)max0,dp1[i][i+n-1] 您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。专业资料学习资料教育培训考试建筑装潢资料
2040326740208930040015
3.
longlongo=1,minn=10000000,m;
structpa{
longlongs;
longlongj;
stringn;
longlongcost;
};
pap[10005];
while(cin>>p[o].s>>p[o].j>>p[o].n)
o++;
for(inti=1;i { for(intg=1;g p[i].cost+=abs(p[i].j-p[g].j)*p[g].s; if(p[i].cost<=minn) { minn=p[i].cost; m=i; } } cout< return0; } 输入:79289Vladivostok 58523Chabarovsk 35184Irkutsk 82213Yalutorovsk 100Moscow 输出: 4. #include usingnamespacestd; inta[500001],b[500001],i,n,A,B,l,r,mid; boolcheck(intmid) { intii,s=0; memcpy(b,a,sizeof(a)); for(ii=1;ii<=n;ii++)b[ii]-=mid*A; for(ii=1;ii<=n;ii++) if(b[ii]>0)s+=(int)ceil((double)b[ii]/B); returns<=mid; } intmain() { scanf("%d%d%d",&n,&A,&B); for(i=1;i<=n;i++)scanf("%d",&a[i]); l=0; r=500010; while(l { mid=(l+r)/2; if(check(mid))r=mid;elsel=mid+1; } printf("%d\n",l); } 输入: 1023 91031274815924 输出: 四.完善程序 (前8空,每空 2分,后4空,每空 3分,共28分)1.逆序对:逆序对的定义是:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i逆序对可以用冒泡排序和归并排序求得。试完善以下冒泡排序程序段与归并排序程序。 s=0; for(i=1;i<=n;i++) for(j=1;j<=(1);j++) if(a[j]>a[j+1]) { (2); ++s; } cout< ////////////////////////////////////////////////////////// #include usingnamespacestd; longlonga[500001],b[500001],s,n; voidguibing(longlongl,longlongr) { if(r-l==0)return; if(r-l==1) { if(a[r] { swap(a[r],a[l]);++s;}return;}longlongmid=(3)i=l,j=mid+1,k=l;guibing(l,mid);(4); while((5)) if(a[i]>a[j]) { s+=(6) b[k]=a[j]; ++k; ++j; } else { b[k]=a[i]; ++k; ++i; } for(;i<=mid;i++)b[k++]=a[i];for(;j<=r;j++)b[k++]=a[j]; for(k=l;k<=r;k++)(7); } intmain() { longlongi; scanf("%ld",&n); for(i=1;i<=n;i++)scanf("%ld",&a[i]); guibing(1,n); printf("%ld\n",s); return0; } 2.石子合并:在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规 定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得 分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. #include usingnamespacestd; constintMaxn=1000+10; intt[Maxn],dp1[Maxn][Maxn],dp2[Maxn][Maxn]; intmain(){ intn; cin>>n; for(inti=1;i<=n;++i){ cin>>t[i]; t[(1)]=t[i];} for(inti=2;i<=2*n;++i)t[i]+=t[i-1]; memset(dp1,0,sizeof(dp1)); for(inti=2*n-1;(2)) for(intj=(3);j<=2*n;++j) {intb=2147483647; for(intk=i;k dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+t[j]-t[i-1]); b=min(b,(4));} dp2[i][j]=b;} intmax0=0,min0=10000000; for(inti=1;i<=n;++i){ max0=max((5)); min0=min(min0,dp2[i][i+n-1]);} cout< return0; }CCFNOIP2019普及组(C++语言)参考答案与评分标准 一、单项选择题(共20题,每题1.5分,共计30分)12345678910CACBADDBBC 11121314151617181920 BDACDACBBD 二、问题求解(共2题,每题5分,共计10分) 1.答案为:(任答其一即可) ①59994,53955②:74943,62964,71973,83952③: 61974,82962,75933,63954 2.a[1]2+a[2]2+⋯⋯+a[∞]2或∑a[i]2 三、阅读程序写结果(共4题,每题8分,共计32分) 1.1.00 2.8 152032406789300400 3.Yalutorovsk112125 4.6 四、完善程序(第1题,每空2分,第2题,每空3分,共计28分)(说明:以下各 程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1.(1)n-1 (2)swap(a[j],a[j+1]); (3)(l+r)/2 (4)guibing(mid+1,r); (5)i<=mid&&j<=r (6)mid-i+1; (7)a[k]=b[k]; 2.(1)i+n (2)i>=1;--i (3)i+1 (4)dp2[i][k]+dp2[k+1][j]+t[j]-t[i-1] (5)max0,dp1[i][i+n-1] 您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。专业资料学习资料教育培训考试建筑装潢资料
for(intg=1;g p[i].cost+=abs(p[i].j-p[g].j)*p[g].s; if(p[i].cost<=minn) { minn=p[i].cost; m=i; } } cout< return0; } 输入:79289Vladivostok 58523Chabarovsk 35184Irkutsk 82213Yalutorovsk 100Moscow 输出: 4. #include usingnamespacestd; inta[500001],b[500001],i,n,A,B,l,r,mid; boolcheck(intmid) { intii,s=0; memcpy(b,a,sizeof(a)); for(ii=1;ii<=n;ii++)b[ii]-=mid*A; for(ii=1;ii<=n;ii++) if(b[ii]>0)s+=(int)ceil((double)b[ii]/B); returns<=mid; } intmain() { scanf("%d%d%d",&n,&A,&B); for(i=1;i<=n;i++)scanf("%d",&a[i]); l=0; r=500010; while(l { mid=(l+r)/2; if(check(mid))r=mid;elsel=mid+1; } printf("%d\n",l); } 输入: 1023 91031274815924 输出: 四.完善程序 (前8空,每空 2分,后4空,每空 3分,共28分)1.逆序对:逆序对的定义是:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i逆序对可以用冒泡排序和归并排序求得。试完善以下冒泡排序程序段与归并排序程序。 s=0; for(i=1;i<=n;i++) for(j=1;j<=(1);j++) if(a[j]>a[j+1]) { (2); ++s; } cout< ////////////////////////////////////////////////////////// #include usingnamespacestd; longlonga[500001],b[500001],s,n; voidguibing(longlongl,longlongr) { if(r-l==0)return; if(r-l==1) { if(a[r] { swap(a[r],a[l]);++s;}return;}longlongmid=(3)i=l,j=mid+1,k=l;guibing(l,mid);(4); while((5)) if(a[i]>a[j]) { s+=(6) b[k]=a[j]; ++k; ++j; } else { b[k]=a[i]; ++k; ++i; } for(;i<=mid;i++)b[k++]=a[i];for(;j<=r;j++)b[k++]=a[j]; for(k=l;k<=r;k++)(7); } intmain() { longlongi; scanf("%ld",&n); for(i=1;i<=n;i++)scanf("%ld",&a[i]); guibing(1,n); printf("%ld\n",s); return0; } 2.石子合并:在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规 定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得 分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. #include usingnamespacestd; constintMaxn=1000+10; intt[Maxn],dp1[Maxn][Maxn],dp2[Maxn][Maxn]; intmain(){ intn; cin>>n; for(inti=1;i<=n;++i){ cin>>t[i]; t[(1)]=t[i];} for(inti=2;i<=2*n;++i)t[i]+=t[i-1]; memset(dp1,0,sizeof(dp1)); for(inti=2*n-1;(2)) for(intj=(3);j<=2*n;++j) {intb=2147483647; for(intk=i;k dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+t[j]-t[i-1]); b=min(b,(4));} dp2[i][j]=b;} intmax0=0,min0=10000000; for(inti=1;i<=n;++i){ max0=max((5)); min0=min(min0,dp2[i][i+n-1]);} cout< return0; }CCFNOIP2019普及组(C++语言)参考答案与评分标准 一、单项选择题(共20题,每题1.5分,共计30分)12345678910CACBADDBBC 11121314151617181920 BDACDACBBD 二、问题求解(共2题,每题5分,共计10分) 1.答案为:(任答其一即可) ①59994,53955②:74943,62964,71973,83952③: 61974,82962,75933,63954 2.a[1]2+a[2]2+⋯⋯+a[∞]2或∑a[i]2 三、阅读程序写结果(共4题,每题8分,共计32分) 1.1.00 2.8 152032406789300400 3.Yalutorovsk112125 4.6 四、完善程序(第1题,每空2分,第2题,每空3分,共计28分)(说明:以下各 程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1.(1)n-1 (2)swap(a[j],a[j+1]); (3)(l+r)/2 (4)guibing(mid+1,r); (5)i<=mid&&j<=r (6)mid-i+1; (7)a[k]=b[k]; 2.(1)i+n (2)i>=1;--i (3)i+1 (4)dp2[i][k]+dp2[k+1][j]+t[j]-t[i-1] (5)max0,dp1[i][i+n-1] 您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。专业资料学习资料教育培训考试建筑装潢资料
p[i].cost+=abs(p[i].j-p[g].j)*p[g].s;
if(p[i].cost<=minn)
minn=p[i].cost;
m=i;
79289Vladivostok
58523Chabarovsk
35184Irkutsk
82213Yalutorovsk
100Moscow
4.
inta[500001],b[500001],i,n,A,B,l,r,mid;
boolcheck(intmid)
intii,s=0;
memcpy(b,a,sizeof(a));
for(ii=1;ii<=n;ii++)b[ii]-=mid*A;
for(ii=1;ii<=n;ii++)
if(b[ii]>0)s+=(int)ceil((double)b[ii]/B);
returns<=mid;
scanf("%d%d%d",&n,&A,&B);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
l=0;
r=500010;
while(l { mid=(l+r)/2; if(check(mid))r=mid;elsel=mid+1; } printf("%d\n",l); } 输入: 1023 91031274815924 输出: 四.完善程序 (前8空,每空 2分,后4空,每空 3分,共28分)1.逆序对:逆序对的定义是:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i逆序对可以用冒泡排序和归并排序求得。试完善以下冒泡排序程序段与归并排序程序。 s=0; for(i=1;i<=n;i++) for(j=1;j<=(1);j++) if(a[j]>a[j+1]) { (2); ++s; } cout< ////////////////////////////////////////////////////////// #include usingnamespacestd; longlonga[500001],b[500001],s,n; voidguibing(longlongl,longlongr) { if(r-l==0)return; if(r-l==1) { if(a[r] { swap(a[r],a[l]);++s;}return;}longlongmid=(3)i=l,j=mid+1,k=l;guibing(l,mid);(4); while((5)) if(a[i]>a[j]) { s+=(6) b[k]=a[j]; ++k; ++j; } else { b[k]=a[i]; ++k; ++i; } for(;i<=mid;i++)b[k++]=a[i];for(;j<=r;j++)b[k++]=a[j]; for(k=l;k<=r;k++)(7); } intmain() { longlongi; scanf("%ld",&n); for(i=1;i<=n;i++)scanf("%ld",&a[i]); guibing(1,n); printf("%ld\n",s); return0; } 2.石子合并:在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规 定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得 分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. #include usingnamespacestd; constintMaxn=1000+10; intt[Maxn],dp1[Maxn][Maxn],dp2[Maxn][Maxn]; intmain(){ intn; cin>>n; for(inti=1;i<=n;++i){ cin>>t[i]; t[(1)]=t[i];} for(inti=2;i<=2*n;++i)t[i]+=t[i-1]; memset(dp1,0,sizeof(dp1)); for(inti=2*n-1;(2)) for(intj=(3);j<=2*n;++j) {intb=2147483647; for(intk=i;k dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+t[j]-t[i-1]); b=min(b,(4));} dp2[i][j]=b;} intmax0=0,min0=10000000; for(inti=1;i<=n;++i){ max0=max((5)); min0=min(min0,dp2[i][i+n-1]);} cout< return0; }CCFNOIP2019普及组(C++语言)参考答案与评分标准 一、单项选择题(共20题,每题1.5分,共计30分)12345678910CACBADDBBC 11121314151617181920 BDACDACBBD 二、问题求解(共2题,每题5分,共计10分) 1.答案为:(任答其一即可) ①59994,53955②:74943,62964,71973,83952③: 61974,82962,75933,63954 2.a[1]2+a[2]2+⋯⋯+a[∞]2或∑a[i]2 三、阅读程序写结果(共4题,每题8分,共计32分) 1.1.00 2.8 152032406789300400 3.Yalutorovsk112125 4.6 四、完善程序(第1题,每空2分,第2题,每空3分,共计28分)(说明:以下各 程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1.(1)n-1 (2)swap(a[j],a[j+1]); (3)(l+r)/2 (4)guibing(mid+1,r); (5)i<=mid&&j<=r (6)mid-i+1; (7)a[k]=b[k]; 2.(1)i+n (2)i>=1;--i (3)i+1 (4)dp2[i][k]+dp2[k+1][j]+t[j]-t[i-1] (5)max0,dp1[i][i+n-1] 您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。专业资料学习资料教育培训考试建筑装潢资料
mid=(l+r)/2;
if(check(mid))r=mid;elsel=mid+1;
printf("%d\n",l);
1023
91031274815924
四.完善程序
(前8空,每空
2分,后4空,每空
3分,共28分)
1.逆序对:
逆序对的定义是:
对于给定的一段正整数序列,逆序对就是序列中
ai>aj
且i逆序对可以用冒泡排序和归并排序求得。试完善以下冒泡排序程序段与归并排序程序。 s=0; for(i=1;i<=n;i++) for(j=1;j<=(1);j++) if(a[j]>a[j+1]) { (2); ++s; } cout< ////////////////////////////////////////////////////////// #include usingnamespacestd; longlonga[500001],b[500001],s,n; voidguibing(longlongl,longlongr) { if(r-l==0)return; if(r-l==1) { if(a[r] { swap(a[r],a[l]);++s;}return;}longlongmid=(3)i=l,j=mid+1,k=l;guibing(l,mid);(4); while((5)) if(a[i]>a[j]) { s+=(6) b[k]=a[j]; ++k; ++j; } else { b[k]=a[i]; ++k; ++i; } for(;i<=mid;i++)b[k++]=a[i];for(;j<=r;j++)b[k++]=a[j]; for(k=l;k<=r;k++)(7); } intmain() { longlongi; scanf("%ld",&n); for(i=1;i<=n;i++)scanf("%ld",&a[i]); guibing(1,n); printf("%ld\n",s); return0; } 2.石子合并:在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规 定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得 分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. #include usingnamespacestd; constintMaxn=1000+10; intt[Maxn],dp1[Maxn][Maxn],dp2[Maxn][Maxn]; intmain(){ intn; cin>>n; for(inti=1;i<=n;++i){ cin>>t[i]; t[(1)]=t[i];} for(inti=2;i<=2*n;++i)t[i]+=t[i-1]; memset(dp1,0,sizeof(dp1)); for(inti=2*n-1;(2)) for(intj=(3);j<=2*n;++j) {intb=2147483647; for(intk=i;k dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+t[j]-t[i-1]); b=min(b,(4));} dp2[i][j]=b;} intmax0=0,min0=10000000; for(inti=1;i<=n;++i){ max0=max((5)); min0=min(min0,dp2[i][i+n-1]);} cout< return0; }CCFNOIP2019普及组(C++语言)参考答案与评分标准 一、单项选择题(共20题,每题1.5分,共计30分)12345678910CACBADDBBC 11121314151617181920 BDACDACBBD 二、问题求解(共2题,每题5分,共计10分) 1.答案为:(任答其一即可) ①59994,53955②:74943,62964,71973,83952③: 61974,82962,75933,63954 2.a[1]2+a[2]2+⋯⋯+a[∞]2或∑a[i]2 三、阅读程序写结果(共4题,每题8分,共计32分) 1.1.00 2.8 152032406789300400 3.Yalutorovsk112125 4.6 四、完善程序(第1题,每空2分,第2题,每空3分,共计28分)(说明:以下各 程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1.(1)n-1 (2)swap(a[j],a[j+1]); (3)(l+r)/2 (4)guibing(mid+1,r); (5)i<=mid&&j<=r (6)mid-i+1; (7)a[k]=b[k]; 2.(1)i+n (2)i>=1;--i (3)i+1 (4)dp2[i][k]+dp2[k+1][j]+t[j]-t[i-1] (5)max0,dp1[i][i+n-1] 您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。专业资料学习资料教育培训考试建筑装潢资料
逆序对可以用冒泡排序和归并排序求得。
试完善以下冒泡排序程序段与归并排序程序。
s=0;
for(i=1;i<=n;i++)
for(j=1;j<=
(1);j++)
if(a[j]>a[j+1])
(2);
++s;
//////////////////////////////////////////////////////////
longlonga[500001],b[500001],s,n;
voidguibing(longlongl,longlongr)
if(r-l==0)return;
if(r-l==1)
if(a[r] { swap(a[r],a[l]);++s;}return;}longlongmid=(3)i=l,j=mid+1,k=l;guibing(l,mid);(4); while((5)) if(a[i]>a[j]) { s+=(6) b[k]=a[j]; ++k; ++j; } else { b[k]=a[i]; ++k; ++i; } for(;i<=mid;i++)b[k++]=a[i];for(;j<=r;j++)b[k++]=a[j]; for(k=l;k<=r;k++)(7); } intmain() { longlongi; scanf("%ld",&n); for(i=1;i<=n;i++)scanf("%ld",&a[i]); guibing(1,n); printf("%ld\n",s); return0; } 2.石子合并:在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规 定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得 分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. #include usingnamespacestd; constintMaxn=1000+10; intt[Maxn],dp1[Maxn][Maxn],dp2[Maxn][Maxn]; intmain(){ intn; cin>>n; for(inti=1;i<=n;++i){ cin>>t[i]; t[(1)]=t[i];} for(inti=2;i<=2*n;++i)t[i]+=t[i-1]; memset(dp1,0,sizeof(dp1)); for(inti=2*n-1;(2)) for(intj=(3);j<=2*n;++j) {intb=2147483647; for(intk=i;k dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+t[j]-t[i-1]); b=min(b,(4));} dp2[i][j]=b;} intmax0=0,min0=10000000; for(inti=1;i<=n;++i){ max0=max((5)); min0=min(min0,dp2[i][i+n-1]);} cout< return0; }CCFNOIP2019普及组(C++语言)参考答案与评分标准 一、单项选择题(共20题,每题1.5分,共计30分)12345678910CACBADDBBC 11121314151617181920 BDACDACBBD 二、问题求解(共2题,每题5分,共计10分) 1.答案为:(任答其一即可) ①59994,53955②:74943,62964,71973,83952③: 61974,82962,75933,63954 2.a[1]2+a[2]2+⋯⋯+a[∞]2或∑a[i]2 三、阅读程序写结果(共4题,每题8分,共计32分) 1.1.00 2.8 152032406789300400 3.Yalutorovsk112125 4.6 四、完善程序(第1题,每空2分,第2题,每空3分,共计28分)(说明:以下各 程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1.(1)n-1 (2)swap(a[j],a[j+1]); (3)(l+r)/2 (4)guibing(mid+1,r); (5)i<=mid&&j<=r (6)mid-i+1; (7)a[k]=b[k]; 2.(1)i+n (2)i>=1;--i (3)i+1 (4)dp2[i][k]+dp2[k+1][j]+t[j]-t[i-1] (5)max0,dp1[i][i+n-1] 您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。专业资料学习资料教育培训考试建筑装潢资料
swap(a[r],a[l]);
return;
longlongmid=
(3)
i=l,j=mid+1,k=l;
guibing(l,mid);
(4)
;
while((5))
if(a[i]>a[j])
s+=(6)
b[k]=a[j];
++k;
++j;
else
b[k]=a[i];
++i;
for(;i<=mid;i++)b[k++]=a[i];for(;j<=r;j++)b[k++]=a[j];
for(k=l;k<=r;k++)
(7);
longlongi;
scanf("%ld",&n);
for(i=1;i<=n;i++)scanf("%ld",&a[i]);
guibing(1,n);
printf("%ld\n",s);
2.石子合并:
在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规
定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得
分。
试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.
constintMaxn=1000+10;
intt[Maxn],dp1[Maxn][Maxn],dp2[Maxn][Maxn];
intmain(){
intn;
for(inti=1;i<=n;++i){
cin>>t[i];
t[
(1)]=t[i];}
for(inti=2;i<=2*n;++i)t[i]+=t[i-1];
memset(dp1,0,sizeof(dp1));
for(inti=2*n-1;
(2))
for(intj=(3);j<=2*n;++j)
{intb=2147483647;
for(intk=i;k dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+t[j]-t[i-1]); b=min(b,(4));} dp2[i][j]=b;} intmax0=0,min0=10000000; for(inti=1;i<=n;++i){ max0=max((5)); min0=min(min0,dp2[i][i+n-1]);} cout< return0; }CCFNOIP2019普及组(C++语言)参考答案与评分标准 一、单项选择题(共20题,每题1.5分,共计30分)12345678910CACBADDBBC 11121314151617181920 BDACDACBBD 二、问题求解(共2题,每题5分,共计10分) 1.答案为:(任答其一即可) ①59994,53955②:74943,62964,71973,83952③: 61974,82962,75933,63954 2.a[1]2+a[2]2+⋯⋯+a[∞]2或∑a[i]2 三、阅读程序写结果(共4题,每题8分,共计32分) 1.1.00 2.8 152032406789300400 3.Yalutorovsk112125 4.6 四、完善程序(第1题,每空2分,第2题,每空3分,共计28分)(说明:以下各 程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1.(1)n-1 (2)swap(a[j],a[j+1]); (3)(l+r)/2 (4)guibing(mid+1,r); (5)i<=mid&&j<=r (6)mid-i+1; (7)a[k]=b[k]; 2.(1)i+n (2)i>=1;--i (3)i+1 (4)dp2[i][k]+dp2[k+1][j]+t[j]-t[i-1] (5)max0,dp1[i][i+n-1] 您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。专业资料学习资料教育培训考试建筑装潢资料
dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+t[j]-t[i-1]);
b=min(b,(4));}
dp2[i][j]=b;}
intmax0=0,min0=10000000;
max0=max((5));
min0=min(min0,dp2[i][i+n-1]);}
cout< return0; }CCFNOIP2019普及组(C++语言)参考答案与评分标准 一、单项选择题(共20题,每题1.5分,共计30分)12345678910CACBADDBBC 11121314151617181920 BDACDACBBD 二、问题求解(共2题,每题5分,共计10分) 1.答案为:(任答其一即可) ①59994,53955②:74943,62964,71973,83952③: 61974,82962,75933,63954 2.a[1]2+a[2]2+⋯⋯+a[∞]2或∑a[i]2 三、阅读程序写结果(共4题,每题8分,共计32分) 1.1.00 2.8 152032406789300400 3.Yalutorovsk112125 4.6 四、完善程序(第1题,每空2分,第2题,每空3分,共计28分)(说明:以下各 程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1.(1)n-1 (2)swap(a[j],a[j+1]); (3)(l+r)/2 (4)guibing(mid+1,r); (5)i<=mid&&j<=r (6)mid-i+1; (7)a[k]=b[k]; 2.(1)i+n (2)i>=1;--i (3)i+1 (4)dp2[i][k]+dp2[k+1][j]+t[j]-t[i-1] (5)max0,dp1[i][i+n-1] 您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。专业资料学习资料教育培训考试建筑装潢资料
}CCFNOIP2019普及组(C++语言)参考答案与评分标准
一、单项选择题(共
20题,每题
1.5分,共计30
分)
1
2
3
4
7
8
9
C
A
B
D
11121314151617181920
BDACDACBBD
二、问题求解(共2题,每题5分,共计10分)
1.答案为:
(任答其一即可)
①59994,53955②:
74943,62964,71973,83952③:
61974,82962,75933,63954
2.a[1]2+a[2]2+⋯⋯+a[∞]2或∑a[i]2
三、阅读程序写结果(共4题,每题8分,共计32分)
1.1.00
2.8
152032406789300400
3.Yalutorovsk112125
4.6
四、完善程序(第1题,每空2分,第2题,每空3分,共计28分)(说明:
以下各
程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查)
(1)n-1
(2)swap(a[j],a[j+1]);
(3)(l+r)/2
(4)guibing(mid+1,r);
(5)i<=mid&&j<=r
(6)mid-i+1;
(7)a[k]=b[k];
(1)i+n
(2)i>=1;--i
(3)i+1
(4)dp2[i][k]+dp2[k+1][j]+t[j]-t[i-1]
(5)max0,dp1[i][i+n-1]
您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。
阅读过后,希望您提出保贵的意见或建议。
阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。
专业资料学习资料教育培训考试建筑装潢资料
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1