CF1627B Not Sitting 题解
思路
非常显然的结论:无论 Rahul 坐在哪里,Tina 为了使离他最远,都要坐在一个角落。而且这个角落一定是四个角落中距离 Rahul 最远的。
所以说我们可以考虑预处理出对于每一个位置距离最远的那一个角落,把这个最远的距离存在一个数组里面。
感性理解一下。一开始的时候,两人的距离一定会比较近(Rahul 会选择坐在中间,无论 Tina 坐在哪一个角落都会比较近);而随着 Tina 的涂漆,中间的位置越来越少,Rahul 只能坐在更加靠近某一个角落的位置,所以两人的距离会逐渐变远。
因此,把这个距离数组从小到大排序再依次输出即可。
代码
void solve(){
tot=0;//归零!!!
cin>>n>>m;
fr1(i,1,n){
fr1(j,1,m){
tot++;
a[tot]=max(abs(i-1)+abs(j-1),max(abs(i-1)+abs(m-j),max(abs(n-i)+abs(j-1),abs(n-i)+abs(m-j))));//取最长距离
}
}
sort(a+1,a+tot+1);//从小到大排序
fr1(i,1,n*m){
cout<<a[i]<<" ";//依次输出即可
}
pt;
}
int main(){
cin>>T;
while(T--){
solve();
}
ET;
}
//Teens-in-Times
//HJL 2004.06.15