CF1560B Who's Opposite?
题意
个人排成一个圈,编号依次为 ,每个人可以透过圆心看到对面的人。
如在下图中, 可以看到 , 可以看到 。

已知 可以看到 ,问 可以看到谁?若无解输出 。
分析
分析题目的例子可以发现,,也就是说 ,这样我们就可以求出圈内人的最大编号 ,如果 中某一个大于 ,显然无解。
若有解,则 可以看到的人是 ,如果溢出就对 取模。
注意一下细节。
代码
#include<bits/stdc++.h>
using namespace std;
int read(){
int x=0,f=1;char ch=getchar();
while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
int t,a,b,c,k;
int main()
{
t=read();
while(t--){
a=read();b=read();c=read();
k=abs(a-b);
if(a>2*k||b>2*k||c>2*k){//无解
cout<<-1<<endl;
continue;
}
int ans=c+k;
if(c+k>2*k)//溢出就取模
ans%=2*k;
cout<<ans<<endl;
}
return 0;
}

浙公网安备 33010602011771号