ファーウェイの事前承認


筆記試験:
AC>=1でOK
側面:
主にプロジェクトに関する知識を聞いて、手でコードeasyを引き裂くのは難しくて、配列は重くて並べ替えます.
両面:
やはり先にいくつかプロジェクトの知识を闻いて、それから私に対抗して学习して、强化して、深く学习して、私はその时愚かで、私が最初に投げたアルゴリズムが后でC++を投げて开発したので、主にそれらの実现の原理と相互の区别を闻いて、私に机械の学习のこの1つの厳しさを闻いて、私はただ私が学んだことがあると言って、emmmmm.しかし、よく知っていて、答えられるようになりました.それから私にTensorflowのいくつかの細部を聞いて、すべて答えることができません.それからまた私にC++を聞いて、lambdaとSTLを聞いて、これらも基礎知識で、すべて答えることができて、道理を言って面接するのが最も楽しいのはC++の相互質問の相互回答の一環です.
手がコードを引き裂くのは本当に少し気持ちが悪くて、BFSではありませんて動的な計画ではありませんて、更に貪欲ではありませんて、螺旋の配列で、その時私はもう少しで書くことができなくて、急いで水を飲んで、深呼吸をします.
テーマは3つのパラメータをあげて、m,x,y mは螺旋の配列の幅で、(x,y)は螺旋の配列の内で定点の座標をあげて、1-9の9つの数字の循環で充填して、この点の値を求めます
例:
1 2 3 4 5
7 8 9 1 6
6 6 7 2 7
5 5 4 3 8
4 3 2 1 9
x=3,y=1,res=5
最初はダイナミックに計画できると思っていたが、10分も無駄にしてしまった.
// 1->9
//1 2 3 4
//3 4 5 5
//2 7 6 6
//1 9 8 7
//m        , (x,y)      1-9  
#include
#include
using namespace std;
class solution
{
public:
	int getMin(int x,int y)
	{
		x = x < 0 ? -x : x;
		y = y < 0 ? -y : y;
		x = x > y ? x : y;
		return x;
	}
	int getPoint(int m, int x, int y)
	{
		int r = m - 1;//      m-1
		int mid = (m-1)>>1;//    
		int circles = mid - getMin(x - mid, y - mid);//   
		int res = 0;
		for (int i=0;i < circles;i++)
		{
			res += r * 4;//  
			r -= 2;
		}
		//             
		if (circles == x)
			res += (y - circles + 1);
		else if (m - 1 - circles == y)
			res += (r + x - circles + 1);
		else if (m - 1 - circles == x)
			res += (r * 2 + m - 1 - circles - y + 1);
		else
			res += (r * 3 + m - 1 - circles - x + 1);
		res = res%9==0 ? 9 : res % 9;
		return res;
	}
};
int main()
{
	solution s = solution();
	//int res = s.getPoint(5, 2, 3);
	int res = s.getPoint(5, 2, 1);
	cout << res << endl;
	system("pause");
	return 0;
}

面接が終わってからコードを改善したら、きっと一番いい方法ではありませんが、十分です.
三面:
三面部屋を間違えて入ったので、本来は30分、一番後ろは20分ぐらいでした.主にいくつかの性格の趣味、長所と短所、カテゴリのHR面を聞いて、何の面経もなくて、あまり鋼を使わないでください.
手でコードを引き裂くには冷静にしなければなりません.引き裂いたのは直接下の面で、引き裂かないのは池に1週間浸かって、人が欠けてからあなたをすくい取りに来ます.