模擬乘法-51nod1185 威佐夫遊戲 V2
阿新 • • 發佈:2018-12-23
思路:
因為數字過大,那麼1.618後面的諸多位小數也會對其產生影響,那麼將1.618後面諸多小數提取出來,模擬乘法
模擬乘法:
普通的a*b 手動托出乘法運算,對應位數運算,最後只要拿出對於整數有影響的第一位小數和整數部分即可。
判斷拿出的數字*差值是否等於較小數a
#include <stdio.h> #include <algorithm> #include <cmath> #include <cstdlib> #include <iostream> #include <cstring> #define mod 1000000000 long long t[3] = {618033988, 749894848, 204586834}; using namespace std; int main(void){ int T; cin>>T; while(T--) { long long a,b; cin>>a>>b; if(a>b) swap(a,b); long long temp=b-a; long long l=temp/mod; long long r=temp%mod; long long ans = ((r*t[2]/mod+(r*t[1]+l*t[2]))/mod+(r*t[0]+l*t[1]))/mod+l*t[0] +b-a; if(ans==a) cout<<"B"<<endl; else cout<<"A"<<endl; } }