LOJ #559. 「LibreOJ Round #9」ZQC 的迷宮
阿新 • • 發佈:2018-06-27
AS left str int 交互 stdout block tro flush ,所以我們只需要一直沿著左側墻壁走即可。
一道ZZ結論題,主要是來寫一寫交互題的。
我們要先知道一句話:
扶著墻是肯定可以走出簡單迷宮的。
然後我們冷靜分析問題。若這個迷宮是\(n\times m\)的,那麽最多有\(2mn+n+m\)個墻壁。
由於題目中提到方格之間都聯通且形成一棵樹,那麽我們刪去\(nm-1\)條邊。
由於邊界其中至多一半會經過一次,其余則不會經過,內部邊可能經過兩次,因此摸著墻壁前進的步數上限為 \(2(nm+n+m+1)-3(n+m)=2nm-n-m-2\)。我們在觀察一下數據範圍,發現:
\(l>2nm\ge 2nm-n-m-2\)。因此我們摸著墻壁走是肯定可以在規定步數內走到終點的。
然後初始時我們面向右側,因此左側一定有墻
由於這是交互題,因此我們可以弄出一個非常精簡的核心算法:
while (!reach_dest()) move_left();
以上參考於官方題解。
然後註意一下交互題的事項即可。千萬要註意請緩存,並且讀進來不要連換行一起,會出鍋的
CODE
#include<bits/stdc++.h>
using namespace std;
int n,m,l,d;
inline int reach_dest(void)
{
puts("reach_dest"); fflush(stdout);
int x; scanf("%d",&x); return x;
}
inline void move_left(void)
{
puts("move_left"); fflush(stdout);
int x; scanf("%d",&x);
}
int main()
{
scanf("%d%d%d%d",&n,&m,&l,&d);
while (!reach_dest()) move_left();
return 0;
}
LOJ #559. 「LibreOJ Round #9」ZQC 的迷宮