되는대로 살자

[C언어 기출문제&풀이] 개미 (미완) 본문

2009~2014/C/C++

[C언어 기출문제&풀이] 개미 (미완)

malu 2010. 11. 9. 21:07



 

프로그램 명: ants
제한시간: 1 초

일련의 개미떼들이 길이가 L cm 인 수평 작대기를 걸어간다. 이 들은 각 초당 1 cm 의 속도로 걸어가고 있다.

개미떼들이 작대기의 끝지점에 도달 하면 그 들은 이 작대기에서 자유 낙하한다. 두 마리의 개미가 서로 만난다면 그들은 가는 방향을 바꾸어 반대 방향으로 걸어간다. 개미가 현재 있는 작대기의 위치를 알지만 우리는 개미가 걷는 방향을 알지는 못한다.

우리가 할 일은 모든 개미들이 작대기에서 자유낙하 할수 있는 최대 빠른 시간과 느린 시간을 구하는 것이다.

입력

첫 줄에는 두 개의 정수가 입력으로 주어진다. 첫 수는 작대기의 길이 이고 다른 하나는 개미의 수 n 이다. 다음 n 개의 수는 개미가 현재 위치하고 있는 위치이다.

입력의 모든 수는 1000000 이하의 정수이다.

출력

두 수를 출력한다. 첫 수는 제일 빠른 시간 , 가장 느린 시간이다.

입출력 예

입력

10 3
2 6 7

출력

4 8

입력

214 7
11 12 7 13 176 23 191

출력

38 207
출처: Waterloo local 2004.09.19




나 여태 잔거 아니예요 여태 하루종일 이 문제 풀었어요 ....혹시 지나가다가 , 할짓없는 C 프로그래머 분들은 에러좀 고쳐 주시면 감사하겠습니다.  
소스코드
#include <stdio.h>
#include <math.h>

int main()
{
 int i,l,n,max,min,center,pos,d,longl,shortl;
 max=center=0;
 min=d=1000000;
 scanf("%d %d",&l,&n);
 for(i=1;i<=n;i++)
 {
  scanf("%d",&pos);
  if(max<pos) max=pos;
  if(min>pos) min=pos;
  if(abs(pos-(l-pos))<d)
  {
   
   d=abs(pos-(l-pos));
   center=pos;
  }
 }
 if(2*(seil((max+min)/2)-1)-(min)>2*(max-seil((max+min)/2))+l-max+1)
  longl=(max+min)/2+(max+min+1)/2-min;
 else
  longl=max-(max+min+1)/2+(l-(max+min+1)/2+1);
 if(center>l-center)
  shortl=l-center;
 else
  shortl=center;
 printf("%d %d",shortl,longl);
}