c316. 最遠點對!前傳

這題的測資真的很友善,雖然給到<1M ,但我用窮舉法還能2ms 。而且這題好像是十個測資點的資料全部一樣,那這樣何必設10個呢😂。

AC (2ms, 100KB)

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;
}

c081. 00102 - Ecological Bin Packing

這題的測資量很小,所以直接窮舉,然後比較也能很快。

AC (1ms, 92KB)

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;
}

c039. 00100 - The 3n + 1 problem

我用的是最笨的做法,沒有建表,就單純把範圍內所有的數全跑一遍,輸出長度最大的。

AC (12ms, 72KB)

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