生活随笔
收集整理的這篇文章主要介紹了
Distance 几何,构造(800)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意 :
- A是原點,給一整數坐標的B點,求一C點滿足上式(曼哈頓距離)
方案一 :
- 顯然A和B的中點一定滿足條件,但是中點不一定是整數點,只有B橫縱坐標都是偶數才滿足;否則,是在中點附近,通過枚舉可知結論
#include <iostream>
#include <unordered_map>
#include <vector>
#define pb push_back
#define fi first;
#define se second;using namespace std
;void solve()
{int x
, y
;cin
>> x
>> y
;if ((x
+ y
) % 2 != 0) cout
<< -1 << ' ' << -1 << endl
;else if (x
% 2 == 0 && y
% 2 == 0) cout
<< x
/ 2 << ' ' << y
/ 2 << endl
;else cout
<< x
/ 2 << ' ' << y
/ 2 + 1 << endl
;
}int main()
{ios
::sync_with_stdio(false); cin
.tie(0); cout
.tie(0);int _
= 1;cin
>> _
;while (_
-- ){solve();}return 0;
}
方案二 :
- 畫圖可知,這兩個圓(半徑相等)相交必然是在A和B點之間的,所以只要枚舉在這區間內即可
- 特別地,當x+y不是偶數時,得到的C點坐標就不是整數了,這種情況輸出-1 -1
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>using namespace std
;typedef long long ll
;void solve()
{int x
, y
;cin
>> x
>> y
;if ((x
+ y
) % 2 != 0){cout
<< -1 << ' ' << -1 << endl
;return ;}int k
= (x
+ y
) / 2;for (int i
= 0; i
<= x
; i
++ )for (int j
= 0; j
<= y
; j
++ ){if ((i
+ j
== k
) && (fabs(i
- x
) + fabs(j
- y
) == k
)){cout
<< i
<< ' ' << j
<< endl
;return ;}}cout
<< -1 << ' ' << -1 << endl
;
}int main()
{ios
::sync_with_stdio(false); cin
.tie(0); cout
.tie(0);int _
= 1;cin
>> _
;while (_
-- ){solve();}return 0;
}
總結
以上是生活随笔為你收集整理的Distance 几何,构造(800)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。