푸는 방법을 몰라서..모범 답안을 참고하여, 조금 수정해서 풀었습니다.
모범 답안 : -1 , 8030001 의 mid 값으로 hi / lo 가 변경되도록 되어있음
mine : 입력데이타를 입력 받을때 첫 시작점과 마지막 끝점을 lo , hi 가 되도록 해서 mid 값으로 서칭
마지막 위치를 찾았을때, 딱떨어지지 않아서 마지막값 찾는 부분 추가함.
왜 타임오버 발생할까요?
모범 답안과 대비해서 그리 수행 횟수가 늘어나는거 같지 않은데요..
여기에 코드를 올리면 되나요?
#include "stdio.h"
int resultvalue;
int city,qnum,maxd,mins;
int table[5005][3];
void check_des( int calc )
{
int des,count,i,calcdes,desv,mincal;
do
{
des = (maxd - mins) / 2;
des += mins;
count = 0;
calcdes = 8030000;
mincal = 8030000;
//각 도시마다 깃발이 몇개 있는지 확인합니다.
for(i=0;i<city;i++)
{
if( (des >= table[i][1]) && (des <= table[i][0]))
{
count += (des-table[i][1]) / table[i][2];
count +=1;
}
else if( des > table[i][0])
{
count += (table[i][0] - table[i][1])/table[i][2];
count +=1;
}
//저는 [i][1] 에 시작위치를 계산하여서 넣었습니다.
//des 가 시작점 이후에 있을때 ( 이전에 있을때는 필요없어서,
//count 완료되는 시점과 실제 위치에 오차가 있어서..이를 보완하는 부분입니다.
if( des >= table[i][1])
{
calcdes = (des-table[i][1])%table[i][2];
if( calcdes == 0 )
mincal = 0;
if( (mincal != 0) && (calcdes < mincal) )
mincal = calcdes;
}
}
//위치 재조정 해주는 부분입니다
if( calc == count )
{
resultvalue = des - mincal;
break;
}
else if( calc < count )
{
maxd = des;
}
else if( calc > count )
{
mins = des;
}
}while(1);
}
int main (int argc, char** argv)
{
int i,j,c,t,testcase;
char in;
//freopen("input.txt", "r", stdin);
setbuf(stdout, NULL);
scanf("%d", &testcase);
for( t = 1; t <= testcase; t++)
{
resultvalue = 0;
maxd = 0;
mins = 8030000;
for(i=0;i<5005;i++)
for(j=0;j<3;j++)
{
table[i][j] = 0;
}
//1. input을 받는다.
scanf("%d", &city);
scanf("%d", &qnum);
//입력 받을때, 시작점을 따로 계산했고, 시작점중 가장 작은값과
//end 지점 가장 큰값을 저장해뒀습니다.
for(i=0;i<city;i++)
for(j=0;j<3;j++)
{
scanf("%d",&table[i][j]);
if( j==1 )
{
table[i][j] = table[i][0] - table[i][j];
if( i == 0 ) mins = table[i][j];
if( table[i][j] < mins )
mins = table[i][j];
}
if( j==0 )
{
if(table[i][0] > maxd)
maxd = table[i][0];
}
}
check_des(qnum);
//2. solve
printf("%d\n",resultvalue);
}
}
iamnotyou
푸는 방법을 몰라서..모범 답안을 참고하여, 조금 수정해서 풀었습니다.
모범 답안 : -1 , 8030001 의 mid 값으로 hi / lo 가 변경되도록 되어있음
mine : 입력데이타를 입력 받을때 첫 시작점과 마지막 끝점을 lo , hi 가 되도록 해서 mid 값으로 서칭
마지막 위치를 찾았을때, 딱떨어지지 않아서 마지막값 찾는 부분 추가함.
왜 타임오버 발생할까요?
모범 답안과 대비해서 그리 수행 횟수가 늘어나는거 같지 않은데요..
여기에 코드를 올리면 되나요?
13년 전