這題的測資真的很友善,雖然給到<1M ,但我用窮舉法還能2ms 。而且這題好像是十個測資點的資料全部一樣,那這樣何必設10個呢😂。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include<stdio.h>
int main(){ int n,i,j; while(scanf("%d",&n) != EOF){ int x[n],y[n],max=0,mi=0,mj=0,tmp; for(i=0;i<n;i++){ scanf("%d%d",&x[i],&y[i]); } for(i=0;i<n-1;i++){ for(j=i+1;j<n;j++){ tmp = (x[j]-x[i])*(x[j]-x[i]) + (y[j]-y[i])*(y[j]-y[i]); if(tmp > max){ max = tmp; mi = i; mj = j; } } } printf("%d %d\n",mi,mj); } return 0; }
|
這題的測資量很小,所以直接窮舉,然後比較也能很快。
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
| #include<stdio.h>
int main(){ int i,b[3],c[3],g[3]; while(scanf("%d%d%d%d%d%d%d%d%d",&b[0],&g[0],&c[0],&b[1],&g[1],&c[1],&b[2],&g[2],&c[2])!=EOF){ int set[6],min,index=0; min=b[1]+b[2]+c[0]+c[2]+g[0]+g[1]; set[1]=b[1]+b[2]+c[0]+c[1]+g[0]+g[2]; set[2]=b[0]+b[2]+c[1]+c[2]+g[0]+g[1]; set[3]=b[0]+b[1]+c[1]+c[2]+g[0]+g[2]; set[4]=b[0]+b[2]+c[0]+c[1]+g[1]+g[2]; set[5]=b[0]+b[1]+c[0]+c[2]+g[1]+g[2]; for(i=1;i<6;i++){ if(set[i]<min){ min=set[i]; index=i; } } if(index==0){printf("BCG");} else if(index==1){printf("BGC");} else if(index==2){printf("CBG");} else if(index==3){printf("CGB");} else if(index==4){printf("GBC");} else if(index==5){printf("GCB");} printf(" %d\n",min); } return 0; }
|
我用的是最笨的做法,沒有建表,就單純把範圍內所有的數全跑一遍,輸出長度最大的。
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
| #include<stdio.h>
int count(int n){ int total=1; while(n!=1){ if(n%2){ n=3*n+1; total++; } else{ n/=2; total++; } } return total; }
int main(){ int a,b,tmp,i; while(scanf("%d%d",&a,&b)!=EOF){ int max=0,change=0; if(a>b){tmp=a;a=b;b=tmp;change=1;} for(i=a;i<=b;i++){ tmp = count(i); if(tmp>max){ max=tmp; } } if(change){printf("%d %d %d\n",b,a,max);} else{printf("%d %d %d\n",a,b,max);} } return 0; }
|
封面圖源:Pixiv