题目描述
Some number of people (this number is even) have stood in a circle. The people stand in the circle evenly. They are numbered clockwise starting from a person with the number 1. Each person is looking through the circle’s center at the opposite person.
You don’t know the exact number of people standing in the circle (but this number is even, no doubt). It is known that the person with the number a is looking at the person with the number b (and vice versa, of course). What is the number associated with a person being looked at by the person with the number c? If, for the specified a, b, and c, no such circle exists, output -1.
Input
The first line contains one integer t (1≤t≤104) — the number of test cases. Then t test cases follow.
Each test case consists of one line containing three distinct integers a, b, c (1≤a,b,c≤108).
Output
For each test case output in a separate line a single integer d — the number of the person being looked at by the person with the number c in a circle such that the person with the number a is looking at the person with the number b. If there are multiple solutions, print any of them. Output −1 if there’s no circle meeting the given conditions.
样例输入
7
6 2 4
2 3 1
2 4 10
5 3 4
1 3 2
2 5 4
4 3 2
样例输出
8
-1
-1
-1
4
1
-1
Note
In the first test case, there’s a desired circle of 8 people. The person with the number 6 will look at the person with the number 2 and the person with the number 8 will look at the person with the number 4.
In the second test case, there’s no circle meeting the conditions. If the person with the number 2 is looking at the person with the number 3, the circle consists of 2 people because these persons are neighbors. But, in this case, they must have the numbers 1 and 2, but it doesn’t meet the problem’s conditions.
In the third test case, the only circle with the persons with the numbers 2 and 4 looking at each other consists of 4 people. Therefore, the person with the number 10 doesn’t occur in the circle.
题意
设所有人按照编号以圆环方式站立,总人数为偶数。已知两个相对站立的人的位置编号,求与给定的人相对站立的人的位置编号。
思路
原题中给了一张图片,还挺形象的:
可以看出,总人数是题目中两个已知人的编号(较大编号-较小编号)*2
接下来分类讨论:
1.如果所求编号大于总人数,则不存在,输出-1;
2.编号大于总人数的一半,则与其相对的人的编号为所求人编号-总人数的一半
3.编号小于总人数的一半,则与其相对的人的编号为所求人编号+总人数的一半
总的来说还是个暴力题啦(x).
(记得开long long!)
C++ 代码
#include <iostream>
#include <math.h>
using namespace std;
typedef long long LL;
int main()
{
int t;
cin>>t;
LL a,b,c;
while(t--)
{
scanf("%lld %lld %lld",&a,&b,&c);
if(a>b)swap(a,b);//可以在开始就先将较小的数放在前面便于计算
if(b-a<a)
{
printf("-1\n");
}
else
{
LL d=(b-a)*2;
if(c>d)
{
printf("-1\n");
}
else
{
if(c<=d/2)
{
printf("%lld\n",c+d/2);
}
else
{
printf("%lld\n",c-d/2);
}
}
}
}
return 0;
}