#UVa:846-Steps

找出步數與距離的關係即可得解。

  • 0步最多能抵達的距離是0
  • 1步最多能抵達的距離是1(1)
  • 2步最多能抵達的距離是2(1 1)
  • 3步最多能抵達的距離是4(1 2 1)
  • 4步最多能抵達的距離是6(1 2 2 1)
  • 5步最多能抵達的距離是9(1 2 3 2 1)
  • 6步最多能抵達的距離是12(1 2 3 3 2 1)
  • ……以此類推

C++(0.004)

/*******************************************************/
/* UVa 846 Steps                                       */
/* Author: LanyiKnight [at] knightzone.org             */
/* Version: 2012/05/18                                 */
/*******************************************************/
#include<iostream>
#include<cstdio>
#include<cmath>
#define ERROR 1e-10
using namespace std;
int main(){
  int n, x, y;
  int dis, step;
  while( scanf( "%d", &n ) != EOF ){
    for( int i = 0 ; i < n ; i++ ){
      scanf( "%d%d", &x, &y );

      dis = y-x;
      if( dis == 0 ){ 
        printf( "0\n" );
        continue;
      }

      step = (int)(sqrt((double)dis)+ERROR);
      if( step * step == dis ) step = step * 2 - 1;
      else if( step * step + step < dis ) step = step * 2 + 1;
      else step = step * 2;

      printf( "%d\n", step );
    }
  }
  return 0;
}

發表迴響