作者ohya0524 (歐爺)
看板C_and_CPP
標題[ACM ] 10611
時間Wed Mar 10 00:27:30 2010
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
題號: 10611 題目:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=18&page=show_problem&problem=1552
遇到的問題: WA...
有問題的code: (請善用置底文的標色功能)
#include<stdio.h>
#include<stdlib.h>
int bsearch(int *a,int l,int r,int key)
{
while(l<r)
{
int mid=(l+r)/2;
if(key==a[mid]) return mid;
else if(key>a[mid]) l=mid+1;
else r=mid-1;
}
if(a[l]>key) return l;
else return l+1;
}
int main()
{
int N,Q,*h1,*h2,i,j,result,middle,time=0;
scanf("%d",&N);
h1=(int*)malloc(sizeof(int)*N);
for(i=0;time!=N;i++)
{
scanf("%d",&h1[i]); time++;
if(h1[i]==h1[i-1])
i--;
}
N=i;
scanf("%d",&Q);
h2=(int*)malloc(sizeof(int)*Q);
for(i=0;i<Q;i++)
scanf("%d",&h2[i]);
for(i=0;i<Q;i++)
{
if(h2[i]>h1[N-1]) printf("%d X\n",h1[N-1]);
else if(h2[i]<h1[0]) printf("X %d\n",h1[0]);
else if(h2[i]==h1[N-1])
{
if(N-2>=0)
printf("%d X\n",h1[N-2]);
else
printf("X X\n");
}
else if(h2[i]==h1[0])
{
printf("X %d\n",h1[1]);
}
else
{
result=bsearch(h1,0,N-1,h2[i]);
if(h1[result]==h2[i]) printf("%d %d\n",h1[result-1],h1[result+1]);
else printf("%d %d\n",h1[result-1],h1[result]);
}
}
system("pause");
return 0;
}
補充說明:
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.180.29
推 QQ29:WA? 03/10 00:34
推 loveme00835:你在存母猴身高的時候已經把重複身高的給去掉, 所以有 03/10 00:46
→ loveme00835:可能最大的身高不是存在h1[ N - 1 ]裡 03/10 00:46
→ loveme00835:阿, 少看一行@@ 03/10 00:47
推 loveme00835:很好奇為什麼else if(h2[i]==h1[0]) 裡面沒有兩個case 03/10 00:51
→ ohya0524:樓上大大有發現問題嗎...WA十幾次...我的頭好暈 03/10 01:01
推 loveme00835:問一個問題 : l、r重合會怎樣? XD 03/10 01:08