A.核酸の検出

A.核酸の検出

時間制限:100ms
スペース制限:128MB


タイトル説明
新しいコロナウイルスの発生!市内の疑わしい患者の多くは各隔離ポイントに集中しており、初期診断は非常に
困難です。専門チームは、疑わしい患者に対して核酸検査を実施するために現場でこれらの隔離ポイントに行く必要があります。都市にはn(n + 1)個の分離点があり、n行とn + 1列の正方行列を形成します。(r、c)を使用して、行rに上から下に、列cに左から右に配置された分離点を示します。たとえば、左上隅の座標は(1,1)であり
、右下隅の座標は(n、n + 1)です。
この都市の交通構造は非常に特殊であり、対角線上に隣接する2つの分離点の間には双方向の経路があります。
さらに、正方行列の境界で時計回りに実行される一方向の地下鉄ループがあります。次の図は、n = 5の都市の
概略図です。
ここに画像の説明を挿入
エキスパートは任意の孤立点から開始でき、その後、道路沿いまたは地下鉄で他の孤立点に移動できます。道を歩いて地下鉄に乗るのに時間の単位がかかります。分離ポイントでの核酸検出に必要な時間はごくわずかです。
専門家は、すべての分離ポイントで核酸検査を完了するのに必要な最小時間を知りたいと思っています。必要な最小時間とルートをリクエストします。
入力の説明:
分離点の正方行列の行数を示す整数n(2 <= n <= 100)を含む合計1行を入力します。
出力の説明
最初の行は、Tが費やした時間を表す整数を出力します。
次はT + 1行を含みます。このパーツのi番目の行には、スペースで区切られた2つの整数xi、yiが含まれています。
これは、作成したルートによって渡されたi番目の分離点の座標が(xi、yi)であることを示します。複数の実行可能なソリューションがある場合は、実行可能なソリューションを出力します。
入力例

2

出力例

5
1 1 
1 2 
1 3
2 3 
2 2 
2 1

ここに画像の説明を挿入
ディープサーチを使用するこの質問はタイムアウトになりますが、ディープサーチはTがn(n + 1)-1に等しい
必要があることを示しているので、ポイントを繰り返すことなくすべてのポイントをトラバースする方法があるはずだと思いました。このトラバーサルは円の中にあると考えることができ、次に示すように、いくつかの判断によってトラバーサルを制御できます(赤い点は判断する必要があることに注意してください)。
ここに画像の説明を挿入

残念ながら、この方法はゲーム終了後1秒で作成しましたが、正誤はコメント欄で修正してくださいが、問題ないと思います

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
int n,ex=1,ey=1,x=2,y=2,step=1;
int main()
{
	//fre();
	scanf("%d",&n);
	int ans=n*(n+1)-1;
	printf("%d\n1 1\n2 2\n",ans);
	while(step!=n*(n+1)-1)
	{
		int tx=x,ty=y;
		if(x==1) //第一行 
		{
			if(y==n+1) x++;
			else if(y==n||ex!=x) y++;  
			else x++,y++;	 
		}
		else if(y==1)    {if(ey!=y&&ex!=x) x--;  else x--,y++;}	            //第一列
		else if(x==n)    {if(ex!=x) y--;  else x--,y++;}                   //第n行
		else if(y==n+1)	 {if(ey!=y||(x==2&&!(n&1)))	x++;  else x++,y--;}  //第n+1列
		else //中间 
		{
			if(ex==x+1&&y!=n)	x--,y++;
			else if(ex==x-1)    x++,y--;
			else x++,y++;
		} 
		printf("%d %d\n",x,y);
		step++,ex=tx,ey=ty;	
	}	
	return 0;
}

130件の元の記事を公開 93を獲得 6805を表示

おすすめ

転載: blog.csdn.net/bigwinner888/article/details/105332702