当前位置: 代码迷 >> 综合 >> CF1612A Distance
  详细解决方案

CF1612A Distance

热度:96   发布时间:2023-10-14 00:26:27.0

原题链接

题意

给一个B点坐标,A点坐标是(0,0),求一个C点坐标,使A点到C点的距离和B点到C点的距离相等,同时使A点到B点距离的一半。

思路

如果A点和B 点之间的距离是奇数那么肯定是-1;

如果是偶数,那么一定有解。

  1. 那么C点到A、B点的距离就是A、B点的距离除以2
  2. 分析这个距离位于哪条轴上
    因为是除以2得到的距离,肯定有一条轴放不下,那就看看那条轴比它大,另外一条就肯定是放不下的,那么就把另外一条放满,剩下的距离放到比它大的轴上。
  3. 肯定有一条轴的长度大于等于这个距离,那么就把C点放在这条轴上,然后再用过放得下的坐标 - 距离得到另一个坐标。
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;cin >> t;while (t -- )       {
    int x, y;cin >> x >> y;if ((x + y) % 2 != 0){
    cout << "-1 -1" << endl;}else{
    int flag = (x + y) / 2;if (y >= flag){
    cout << x << " " << y - flag << endl;}else{
    cout << x - flag << " " << y << endl;;}}}return 0;
}
  相关解决方案