01: 가장 가 까 운 요 소 를 찾 습 니 다.

2062 단어 분 치 법
제목:http://noi.openjudge.cn/ch0111/01/
총 시간 제한: 
1000ms
 
메모리 제한: 
65536kB
묘사 하 다.
비 하강 시퀀스 에서 주어진 값 과 가장 가 까 운 요 소 를 찾 습 니 다.
입력
첫 번 째 줄 은 비 하강 시퀀스 길이 의 정수 n 을 포함 합 니 다.1 <= n <= 100000。 두 번 째 줄 은 n 개의 정 수 를 포함 하고 비 하강 서열 의 각 요 소 를 포함한다.모든 원소 의 크기 는 0 - 1, 000, 000, 000 사이 에 있다.세 번 째 줄 은 질문 할 주어진 값 의 개 수 를 포함 하 는 정수 m 를 포함 합 니 다.1 <= m <= 10000。 다음 m 줄 은 줄 마다 하나의 정수 로 가장 가 까 운 요소 의 주어진 값 을 묻 기 위해 서 입 니 다.모든 주어진 값 의 크기 는 0 - 1, 000, 000 사이 입 니 다.
출력
m 줄, 각 줄 의 정 수 는 주어진 값 에 가장 가 까 운 요소 값 으로 입력 순 서 를 유지 합 니 다.여러 값 이 조건 을 충족 시 키 면 출력 이 가장 작은 값 입 니 다.
샘플 입력
3
2 5 8
2
10
5

샘플 출력
8
5
 1 #include
 2 #include
 3 int main(int argc, char *argv[])
 4 {
 5     int n,i,*a,m,t;
 6     int begin,end,mid;
 7     int x,y;
 8     
 9     scanf("%d",&n);
       //     n      ,      
10     a=(int *)malloc(n*sizeof(int));
11     for(i=0;it) { printf("%d
",a[0]); continue;}   // , 18 else if(a[n-1]1) 24 { 25 if(a[mid]==t) { printf("%d
",a[mid]);break;} 26 else 27 { 28 if(a[mid]>t) 29 { 30 end=mid-1; 31 } 32 else 33 { 34 begin=mid+1; 35 } 36 } 37 mid=(begin+end)/2; 38 }   // , 39 if(a[mid]!=t) 40 { 41 x=abs(a[begin]-t); 42 y=abs(a[end]-t); 43 if(xy) printf("%d
",a[end]); 45 else printf("%d
",(a[begin]원본 링크:https://www.cnblogs.com/huashanqingzhu/p/6882821.html

좋은 웹페이지 즐겨찾기