GOC国赛特训及答案
2356两个八分音符

1 2 3 4 5 6 7 8
| int main(){ p.c(0); p.oo(20); p.rt(90).fd(20).lt(90).size(4).fd(100); p.rt(70).size(10).fd(100).rt(110).size(4).fd(100); p.rt(90).fd(20).oo(20); return 0; }
|
2357变化的正三角形

1 2 3 4 5 6 7 8 9 10
| int main(){ for(int i=0;i<5;i++){ p.lt(30); for(int j=0;j<4;j++){ p.fd(100-10*i).rt(120); } p.fd(50-5*i).lt(60+10*i); } return 0; }
|
2358偶数车辆和


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| int main(){ int n,a[10],sum; cin >> n; for(int i=0;i<n;i++){ cin >> a[i]; } for(int i=0;i<n;i++){ p.moveTo(40*i,a[i]/2.0); if(a[i] % 2==0){ sum += a[i]*20; p.rr(20,a[i],1); }else{ p.rr(20,a[i],0); } } p.moveTo(20*n-20,-1*sum/(80*n-40)); p.rr(40*n-20,sum/(40*n-20),3); return 0; }
|
2359矩形外框A



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| int myMax(int a,int b){ if(a>b) return a; else return b; } int main(){ int a[4],X,Y,max,res; for(int i=0;i<4;i++){ cin >> a[i]; if(max<a[i]) max=a[i]; } p.r(100,100).up(); p.moveTo(-50,50); for(int i=0;i<4;i++){ p.rt(90).o(a[i]); if(a[i]==max){ X=getX(); Y=getY(); res=i; } p.fd(100); } if(a[res]>a[(res+1)%4]+100 && a[res]>a[(res+2)%4]+100&&a[res]>a[(res+3)%4]+100){ p.moveTo(X,Y); p.r(max*2,max*2); }else{ if(a[(res+1)%4]<a[(res+2)%4] && a[(res+2)%4] > a[(res+3)%4]){ cout << "对角线"; p.moveTo(X/abs(X)*(50+max-(a[res]+a[(res+2)%4]+100)/2.0),Y/abs(Y)*(50+max-(a[res]+a[(res+2)%4]+100)/2.0)); p.r((a[res]+a[(res+2)%4]+100),(a[res]+a[(res+2)%4]+100)); }else{ if((res%2==0&&a[(res+1)%4]>a[(res+2)%4] && a[(res+1)%4] > a[(res+3)%4])||(res%2==1&&a[(res+3)%4]>a[(res+1)%4] && a[(res+3)%4] > a[(res+2)%4])){ p.moveTo(X/abs(X)*(50+max-(max+a[(res+1+2*(res%2))%4]+100)/2.0),Y/abs(Y)*(50+max-(max+myMax(a[(res+2-res%2)%4],a[(res+3-res%2)%4])+100)/2.0)); p.r(max+a[(res+1+2*(res%2))%4]+100,max+myMax(a[(res+2-res%2)%4],a[(res+3-res%2)%4])+100); }else{ p.moveTo(X/abs(X)*(50+max-(max+myMax(a[(res+1+res%2)%4],a[(res+2+res%2)%4])+100)/2.0),Y/abs(Y)*(50+max-(max+a[(res+3-2*(res%2))%4]+100)/2.0)); p.r(max+myMax(a[(res+1+res%2)%4],a[(res+2+res%2)%4])+100,max+a[(res+3-2*(res%2))%4]+100); }
} } return 0; }
|
2360绿色正三角形

1 2 3 4 5 6 7 8 9 10
| int main(){ p.c(10).rt(30); for(int i=0;i<6;i++) { if(i==3){ p.rt(60).fd(75).lt(120); } p.fd(150).rt(120); } return 0; }
|
2361黑色印记

1 2 3 4 5 6 7 8 9 10 11
| int main(){ p.picU(0).up(); p.oo(283,0); p.rr(400,400,15); p.rt(45).rr(400,400,15); for(int i=0;i<8;i++){ p.fd(150).rt(45).rr(90,90,0).lt(45).bk(150); p.rt(45); } return 0; }
|
2362挑选日期

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| int main(){ p.rt(90).up(); int a[5]; for(int i=0;i<5;i++){ cin >> a[i]; } for(int i=0;i<5;i++){ if((a[i]+1)%7==6){ p.oo(20,3); }else if((a[i]+1)%7==0){ p.oo(20,4); }else{ p.oo(20,1); } p.fd(40); } return 0; }
|
2363车辆统计


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| int main(){ double avg,sum=0,n,a[10],max=0; p.hide().speed(9); cin >> n; for(int i=0;i<n;i++){ cin >> a[i]; sum += a[i]; if(max < a[i]) max=a[i]; } avg = sum / n; for(int i=0;i<n;i++){ p.moveTo(20*i,0).fd(a[i]); if(max==a[i]) p.up().fd(20).o(20,1).down(); } p.moveTo(0,avg).rt(90).c(1).fd(20*n-20); return 0; }
|
2364统计排水量


1 2 3 4 5 6 7 8 9 10 11 12 13
| int main(){ double sum=0,n,a[15],max=0; p.hide().speed(9); cin >> n; for(int i=0;i<n;i++){ cin >> a[i]; if(max < a[i]) max=a[i]; } for(int i=0;i<n;i++){ p.moveTo(20*i,a[i]/max*150).r(20,a[i]/max*300); } return 0; }
|
2365矩形外框B

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| int myMax(int a,int b){ if(a>b) return a; else return b; } int main(){ int a[4],X,Y,max,res; for(int i=0;i<4;i++){ cin >> a[i]; if(max<a[i]) max=a[i]; } p.r(100,100).up(); p.moveTo(-50,50); for(int i=0;i<4;i++){ p.rt(90).o(a[i]); if(a[i]==max){ X=getX(); Y=getY(); res=i; } p.fd(100); } if(a[res]>a[(res+1)%4]+100 && a[res]>a[(res+2)%4]+100&&a[res]>a[(res+3)%4]+100){ p.moveTo(X,Y); p.r(max*2,max*2); }else{ if(a[(res+1)%4]<a[(res+2)%4] && a[(res+2)%4] > a[(res+3)%4]){ p.moveTo(X/abs(X)*(50+max-(a[res]+a[(res+2)%4]+100)/2.0),Y/abs(Y)*(50+max-(a[res]+a[(res+2)%4]+100)/2.0)); p.r((a[res]+a[(res+2)%4]+100),(a[res]+a[(res+2)%4]+100)); }else{ if((res%2==0&&a[(res+1)%4]>a[(res+2)%4] && a[(res+1)%4] > a[(res+3)%4])||(res%2==1&&a[(res+3)%4]>a[(res+1)%4] && a[(res+3)%4] > a[(res+2)%4])){ p.moveTo(X/abs(X)*(50+max-(max+a[(res+1+2*(res%2))%4]+100)/2.0),Y/abs(Y)*(50+max-(max+myMax(a[(res+2-res%2)%4],a[(res+3-res%2)%4])+100)/2.0)); p.r(max+a[(res+1+2*(res%2))%4]+100,max+myMax(a[(res+2-res%2)%4],a[(res+3-res%2)%4])+100); }else{ p.moveTo(X/abs(X)*(50+max-(max+myMax(a[(res+1+res%2)%4],a[(res+2+res%2)%4])+100)/2.0),Y/abs(Y)*(50+max-(max+a[(res+3-2*(res%2))%4]+100)/2.0)); p.r(max+myMax(a[(res+1+res%2)%4],a[(res+2+res%2)%4])+100,max+a[(res+3-2*(res%2))%4]+100); }
} } return 0; }
|
2366彩色花朵

1 2 3 4 5 6 7 8 9 10 11 12
| int main(){ p.picU(0); p.up(); for(int i=0;i<9;i++){ p.fd(130).ee(20,100,13).bk(130).rt(40); } p.rt(20); for(int i=0;i<9;i++){ p.fd(110).ee(30,80,14).bk(110).rt(40); } return 0; }
|
2367变化的正方形


1 2 3 4 5 6 7 8 9 10 11
| int main(){ int n; cin >> n; for(int i=0;i<n;i++){ p.c(i); for(int j=0;j<6;j++){ p.fd(200-20*i).lt(90); } } return 0; }
|
2368彩色图形


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| int main(){ p.moveTo(-300,300).up().hide().rt(90); int n; cin >> n; for(int i=0;i<n;i++){ for(int j=i;j<n+i;j++){ if(j>n-1){ p.oo(20,(j-1)%(n-1)); }else{ p.oo(20,j);
} p.fd(40); } p.moveTo(-300,260-40*i); } return 0; }
|
2369腾图


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| int main(){ p.c(12).speed(9).hide(); int n,a,b,o; cin >> n; for(int i=0;i<6;i++){ p.fd(n).rt(60); } p.rt(90); a = 2*sqrt(n*n-(n/2.0)*(n/2.0)); for(int i=0;i<3;i++){ p.fd(a).lt(120); } b = a /2.0; p.fd(b).lt(60); for(int i=0;i<3;i++){ p.fd(b).rt(30).fd(n/2.0).bk(n/2.0).lt(150); } o = b/2.0/sqrt(3); p.up().fd(b/2.0).lt(90).fd(o).o(o); return 0; }
|
2370变化的立方体


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| int gcd(int a, int b) { while (b != 0) { int temp = a % b; a = b; b = temp; } return a; }
int gcdOfThree(int a, int b, int c) { int gcdAB = gcd(a, b); return gcd(gcdAB, c); }
int main(){ int a[3],b; p.speed(6); for(int i=0;i<3;i++){ cin >> a[i]; } b=gcdOfThree(a[0],a[1],a[2]); for(int i=0;i<=a[0]/b;i++){ p.moveTo(-b*i,-a[2]); p.fd(a[2]).rt(45).fd(a[1]).lt(45); } p.rt(90); for(int i=0;i<=a[1]/b;i++){ p.fd(a[0]).rt(90).fd(a[2]); p.up().bk(a[2]).rt(90).fd(a[0]).lt(45).fd(b).lt(135).down(); } for(int i=0;i<a[2]/b;i++){ p.moveTo(-a[0],-b*i-b); p.fd(a[0]).lt(45).fd(a[1]).rt(45); } return 0; }
|
2371矩形外框C

