송유관 문제 - 분할 치료
유정 이 두 개 있 으 면 두 개의 유정 남북 방향 사이 의 임 의 위 치 를 취하 고 세 개의 유정 이 있 으 면 중위 수 를 취한 다.n. 유정 은 중위 수 아래 에서 분 리 된 사상 으로 중위 수 를 구 하 는 것 이지 C 언어 로 자체 적 으로 가지 고 있 는 sort () 함수 가 아니다.
#include
#include//abs()
#define N 10010
int b[N],a[N];
void swapAij(int i,int j)
{
int temp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
int SearchMid(int s,int e,int t)// a[s] a[e], t
{
int nleft=0;
//printf(" a[%d] a[%d] %d
",s,e,t);
//for(int k=s; k<=e; k++)
//printf("%d ",a[k]);
//printf("
");
int i,j=e;
// i,j , a[s] a[s] , nleft
for(i=s+1; i<=j; i++)
{
if(a[i]<=a[s])
nleft++;//
//a[i]>a[s] , a[j]<=a[s]
// a[i] a[j],nleft++
else
{
for(; j>i; j--)
if(a[j]<=a[s])
{
swapAij(i,j);//
nleft++;// ++
}
}
}
//a. a[j] ,i=e a[i] a[s]
//b. a[j] ,a[j]>a[s],i=j
// t-1, t a[s]
if(nleft+1==t)
return a[s];
// nleft t-1, a[s], t-nleft-1
else if(nleft+11,e,t-nleft-1);
//nleft+1>t, t
else
SearchMid(s+1,i-1,t);
}
int main()
{
int n,mid,sum=0;
scanf("%d",&n);
for(int i=0; iscanf("%d %d",&b[i],&a[i]);
mid=SearchMid(0,n-1,n/2+1);// a[0] a
[n-1] n/2-1
//printf("mid=%d
",mid);
for(int i=0; iabs(a[i]-mid);
printf("%d",sum);
return 0;
}
/ * 입력 샘플 5 1 2 2 1 3 3 - 2 3 5 1 3 - 2 3 1 2 2 2 2 2 출력 샘플 6 * /
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.