#UVa:10673-Play with Floor and Ceil

灆洢 2011-12-17 11:32:03

首先,要先知道兩個括號的意義:

  • ┌ ┐ => 取無條件進位(即是取ceil值) Ex. ┌1/3┐ = 1
  • └ ┘ => 取無條件捨去(即是取floor值) Ex. └1/3┘ = 0

接著p和q就刷過各種可能即可得解。

C++(0.376)

/*******************************************************/
/* UVa 10673 Play with Floor and Ceil                  */
/* Author: Maplewing [at] knightzone.studio            */
/* Version: 2011/12/17                                 */
/*******************************************************/
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;

long long div( long long x, long long k, double (*func)(double) ){
  return (long long)func( (double)x/(double)k );
}

int main(){
  int n;
  long long x, k, p, q, temp;
  bool answerp;
  while( scanf( "%d", &n ) != EOF ){
    for( int i = 0 ; i < n ; i++ ){
      scanf( "%lld%lld", &x, &k );
      answerp = 0;
      for( p = 0 ; !answerp ; p++ )
        for( q = 0 ; !answerp ; q++ ){
          temp = p*div(x,k,floor)+q*div(x,k,ceil);
          if( temp == x )
            answerp = 1;
          else if( temp > x )
            break;
        }
      printf( "%lld %lld\n", --p, --q );
    }
  }
  return 0;
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料