斐波那契
多画点图,因为这个题一看就是找规律。
画图一推之后,发现每次的父亲都是他减去他能减掉的最大的\(fib\)数。
那就倒序枚举,\(O(60)\)完成操作,记录到数组里面,然后暴力匹配即可
#include <cstring>
#include <algorithm>
#include <cstdio>
#define mp make_pair
#define R register int
#define int long long
#define printf Ruusupuu = printf
int Ruusupuu ;
using namespace std ;
typedef long long L ;
typedef long double D ;
typedef unsigned long long G ;
typedef pair< int , int > PI ;
const int N = 1e2 + 10 ;
inline int read(){
int w = 0 ; bool fg = 0 ; char ch = getchar() ;
while( ch < '0' || ch > '9' ) fg |= ( ch == '-' ) , ch = getchar() ;
while( ch >= '0' && ch <= '9' ) w = ( w << 1 ) + ( w << 3 ) + ( ch ^ '0' ) , ch = getchar() ;
return fg ? -w : w ;
}
inline void wap( int &a , int &b ){ a = a ^ b , b = a ^ b , a = a ^ b ; }
inline int mins( int a , int b ){ int zt = b - a ; return a + ( zt & ( zt >> 31 ) ) ; }
inline int maxs( int a , int b ){ int zt = b - a ; return b - ( zt & ( zt >> 31 ) ) ; }
inline int abss( int a ){ int zt = a >> 31 ; return ( a + zt ) ^ zt ; }
int T , fb [N] , x , y , stx [N] , sty [N] , topx , topy , ans ;
void sc(){
T = read() ;
fb [1] = 0 , fb [1] = 1 ;
for( R i = 2 ; i <= 60 ; i ++ )
fb [i] = fb [i - 1] + fb [i - 2] ;
}
inline void clear(){
memset( stx , 0 , sizeof( stx ) ) ;
memset( sty , 0 , sizeof( sty ) ) ;
topx = topy = ans = 0 ;
}
inline void Addthem( int x , int y ){
stx [++ topx] = x , sty [++ topy] = y ;
for( R i = 60 ; i >= 1 ; i -- ){
if( x > fb [i] ) x -= fb [i] , stx [++ topx] = x ;
if( y > fb [i] ) y -= fb [i] , sty [++ topy] = y ;
} sort( stx + 1 , stx + 1 + topx ) , sort( sty + 1 , sty + 1 + topy ) ;
stx [1] = sty [1] = 1 ;
// for( R i = 1 ; i <= topx ; i ++ ) printf( "%lld " , stx [i] ) ; puts( "" ) ;
// for( R i = 1 ; i <= topy ; i ++ ) printf( "%lld " , sty [i] ) ; puts( "" ) ;
int top = max( topx , topy ) ;
for( R i = 1 ; i <= top ; i ++ )
if( stx [i] != sty [i] ) { ans = stx [i - 1] ; break ; }
if( !ans ) ans = stx [topx] ;
}
void work(){
while( T -- ){
clear() ;
x = read() , y = read() ;
Addthem( x , y ) ;
printf( "%lld\n" , ans ) ;
}
}
signed main(){
sc() ;
work() ;
return 0 ;
}
$The \ light \ has \ betrayed \ me$

浙公网安备 33010602011771号