曾经的WF题,如今我一个小菜鸟都能做出来了,可见时代在进步啊。这题用nlogn算法做的,由于不知道有多少个数,所以数组要开大些,反正我随便开了一个是够了。
1 #include <stdio.h> 2 #include <string.h> 3 int c[2000],len=-1; 4 int find(int t) 5 { 6 int le=0,ri=len,mid; 7 while(le <= ri) 8 { 9 mid = (le+ri) >> 1; 10 if(c[mid] == t) 11 return mid; 12 if(c[mid] < t) 13 ri = mid - 1; 14 else le = mid + 1; 15 } 16 return le; 17 } 18 int main() 19 { 20 int t,n,m=0; 21 c[0] = 0; 22 while(scanf("%d",&t)) 23 { 24 if(t == -1) 25 if(len == -1) return 0; 26 else 27 { 28 if(m++) printf("\n"); 29 printf("Test #%d:\n maximum possible interceptions: %d\n",m,len+1); 30 c[0] = 0; 31 len = -1; 32 } 33 else 34 { 35 n = find(t); 36 c[n] = t; 37 if(n > len) len = n; 38 } 39 } 40 return 0; 41 }