題號 | 標題 | 已通過代碼 | 題解 | 討論 | 通過率 | 我的狀態 |
---|---|---|---|---|---|---|
A | Audio | 點擊查看 | 進入題解 | 進入討論 | 498/1102 | 通過 |
B | Bits | 點擊查看 | 進入題解 | 進入討論 | 19/39 | 未通過 |
C | Channels | 點擊查看 | 進入題解 | 進入討論 | 275/1227 | 通過 |
D | DDoS | 點擊查看 | 進入題解 | 進入討論 | 41/188 | 未通過 |
E | Exams | 點擊查看 | 進入題解 | 進入討論 | 218/607 | 通過 |
F | Fool Problem | 點擊查看 | 進入題解 | 進入討論 | 489/1357 | 通過 |
G | Game | 點擊查看 | 進入題解 | 進入討論 | 207/617 | 通過 |
H | ”Happy New Year!“ | 點擊查看 | 進入題解 | 進入討論 | 1120/2908 | 通過 |
I | I love you | 點擊查看 | 進入題解 | 進入討論 | 172/312 | 通過 |
J | Jelly | 點擊查看 | 進入題解 | 進入討論 | 174/511 | 通過 |
A Audio
鏈接:https://ac.nowcoder.com/acm/contest/3947/A
來源:牛客網
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
題目描述
Nancy很喜歡音樂。
她能同時分辨出三種不同的音樂。恰巧,一座城市中有三處同時有交響音樂會(音源響度相同)。但是Nancy每一場都不想錯過,於是她想尋找一個地點,使得三處音樂會聲音的響度相同,這樣她就可以同時欣賞三場音樂會啦!
(注:假設聲音傳播過程中不會受障礙物作用,聲音傳播滿足平方反比定律)
輸入描述:
共三行:每行兩個整數xix_ixi與yiy_iyi,三點不共線。
數據滿足:0≤∣xi∣,∣yi∣≤1090 \leq |x_i|, |y_i| \leq 10^{9}0≤∣xi∣,∣yi∣≤109。
輸出描述:
共一行:兩個實數posx,posypos_x, pos_yposx,posy,表示Nancy欣賞音樂會的地點(保留三位小數)
示例1
輸入
[複製](javascript:void(0)😉
0 0
1 3
4 2
輸出
[複製](javascript:void(0)😉
2.000 1.000
解析
根據題意,需要找到三點距離相等的點,數學上即外心,亦稱外圓圓心。輸入的三個點不共線,這個條件能保證外心的存在。
計算三角形兩邊中垂線交點是外心的常用求解方法。首先我們需要中垂線的直線方程表達出來,這裏涉及到的是高中知識,直線方程如下,
給定三角形三個頂點的座標,如何求三角形的外心的座標呢?
例如 :給定a(x1,y1) b(x2,y2) c(x3,y3)求外接圓心座標O(x,y)
1. 首先,外接圓的圓心是三角形三條邊的垂直平分線的交點,我們根據圓心到頂點的距離相等,可以列出以下方程:
(x1-x)*(x1-x)+(y1-y)*(y1-y)=(x2-x)*(x2-x)+(y2-y)*(y2-y);
(x2-x)*(x2-x)+(y2-y)*(y2-y)=(x3-x)*(x3-x)+(y3-y)*(y3-y);
2.化簡得到:
2*(x2-x1)*x+2*(y2-y1)y=x2^2+y2^2-x1^2-y1^2;
2*(x3-x2)*x+2*(y3-y2)y=x3^2+y3^2-x2^2-y2^2;
令A1=2*(x2-x1);
B1=2*(y2-y1);
C1=x2^2+y2^2-x1^2-y1^2;
A2=2*(x3-x2);
B2=2*(y3-y2);
C2=x3^2+y3^2-x2^2-y2^2;
即
A1*x+B1y=C1;
A2*x+B2y=C2;
3.最後根據克拉默法則:
x=((C1*B2)-(C2*B1))/((A1*B2)-(A2*B1));
y=((A1*C2)-(A2*C1))/((A1*B2)-(A2*B1));
因此,x,y爲最終結果;
對於空間中的三角形,只不過最後解方程組的時候是三元方程組
Ps:克拉默法則可以用向量積和數量積的方法證明,也可以用高等代數的知識證明
代碼
import sys
sys.setrecursionlimit(10 ** 9)
IA = lambda: map(eval, input().split())
IAL = lambda: list(map(eval, input().split()))
IM = lambda N: [IA() for _ in range(N)]
# !/usr/bin/env python3
# -*- coding: utf-8 -*-
N = 100005
a = [int(0) for i in range(N)]
x1,y1=IA()
x2,y2=IA()
x3,y3=IA()
a=((y2-y1)*(y3*y3-y1*y1+x3*x3-x1*x1)-(y3-y1)*(y2*y2-y1*y1+x2*x2-x1*x1))/(2.0*((x3-x1)*(y2-y1)-(x2-x1)*(y3-y1)))
b=((x2-x1)*(x3*x3-x1*x1+y3*y3-y1*y1)-(x3-x1)*(x2*x2-x1*x1+y2*y2-y1*y1))/(2.0*((y3-y1)*(x2-x1)-(y2-y1)*(x3-x1)))
print('%.3f' %a,end=" ")
print('%.3f' %b)
#print("%.3lf %.3lf"%(a,b))
C Channels
鏈接:https://ac.nowcoder.com/acm/contest/3947/C
來源:牛客網
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
題目描述
Nancy喜歡學習,也喜歡看電視。
爲了想了解她能看多長時間的節目,不妨假設節目從時刻1開始,一直播放到時刻6×101006 \times 10^{100}6×10100。每個節目持續50個時刻,節目與節目間會有10個時刻的廣告時間。
然而,Nancy實在是太忙了,她從t1t_1t1時刻開始觀看,觀看至t2t_2t2時刻,請你幫忙計算她有多少個時刻能欣賞到電視節目。
輸入描述:
若干行:每行兩個整數t1t_1t1與t2t_2t2。
數據滿足:1≤t1≤t2≤10181 \leq t_1 \leq t_2 \leq 10^{18}1≤t1≤t2≤1018。
輸出描述:
若干行:每行一個整數,表示能品味電視節目的時刻數。
示例1
輸入
[複製](javascript:void(0)😉
1 61
輸出
[複製](javascript:void(0)😉
51
示例2
輸入
[複製](javascript:void(0)😉
116969978 507978500
180480072 791550396
139567120 655243745
1470545 167613747
57644034 176077476
44676 56984808
215706822 369042088
108368065 320914746
輸出
[複製](javascript:void(0)😉
325840433
509225275
429730516
138452673
98694536
47450113
127779387
177122232
分析
前綴和+容斥:統計[L,R]中60的個數:num=R/60-(L-1)/60。(注意num先-1,因爲首個60可能不完整)
然後計算端點L,R的貢獻
多組輸入
代碼
import sys
sys.setrecursionlimit(10 ** 9)
IA = lambda: [int(x) for x in input().split()]
IM = lambda N: [IA() for _ in range(N)]
# !/usr/bin/env python3
# -*- coding: utf-8 -*-
N = 100005
a = [int(0) for i in range(N)]
while True:
try:
x,y=IA()
n=y//60-(x-1)//60
n-=1
add1=min(y%60,50)
add2=max(60-(x-1)%60-10,0)
#print(add2)
ans=n*50+add1+add2
print(ans)
except EOFError:
break
D DDoS
鏈接:https://ac.nowcoder.com/acm/contest/3947/D
來源:牛客網
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
題目描述
Nancy的男朋友喜歡網絡安全!
最近,一種新的DDoS——脈衝波悄然來臨。其基本原理是利用不同線路服務器的延時,使得Request同時到達目標服務器,以堵塞其它正常的通訊。
不妨假設攻擊者在1號節點,目標服務器在nnn號節點,其餘節點(2到n-1號節點)爲中繼服務器。
攻擊者可以在任意時間發送一個定向數據包(即規定其經過中繼服務器的路線,但不同數據包的路線不能完全相同),目標服務器對這種數據包具有100%的識別率,一旦識別到這種數據包,則會屏蔽這一時刻後的所有數據包。
Nancy好奇,攻擊者在最優策略下,目標服務器能夠收到多少份數據包呢?
輸入描述:
第一行:兩個整數n,m。
接下來m行:每行三個整數x,y,z,表示節點x與y可以單向通信(x到y),耗時爲z。
數據滿足:3≤n≤100000,1≤m≤2000003 \leq n \leq 100000, 1 \leq m \leq 2000003≤n≤100000,1≤m≤200000,0≤z≤⌊10πe⌋0 \leq z \leq \lfloor10^{\pi e}\rfloor0≤z≤⌊10πe⌋,圖爲拓撲圖(有向無環圖)。
輸出描述:
共一行:表示攻擊者在最優策略下,目標服務器能夠收到數據包的數量。
由於數量可能會很大,你只需要輸出答案對20010905取模後的值。
示例1
輸入
[複製](javascript:void(0)😉
4 4
1 2 3
1 3 1
2 4 1
3 4 3
輸出
[複製](javascript:void(0)😉
2
說明
顯然,攻擊者在0時刻發送兩個定向數據包(1-2-4和1-3-4),它們同時在第4時刻到達目標服務器。
分析
官方題解:
不易觀察、挺難發現、較難得到攻擊者可以通過調整發送數據包的時間來使得所有數據包同時到達服務器(想打出題人),故原題意轉化爲求1到n的路徑條數,拓撲圖上DP即可。
注意定向的含義是規定路線及經過的中繼節點,所以重邊的時候格外小心(需要算兩倍)。
邊權無用(其實這裏給了個奇怪的數據範圍是在暗示呢QwQ)
代碼
python(超時)
import sys
import queue
sys.setrecursionlimit(10 ** 9)
IA = lambda: map(eval, input().split())
IAL = lambda: list(map(eval, input().split()))
IM = lambda N: [IA() for _ in range(N)]
# !/usr/bin/env python3
# -*- coding: utf-8 -*-
N = 100005
MOD = 20010905
tot = int(0)
class Edge:
def __init__(self,to,next):
self.to=to
self.next=next
e=[]
e.append(Edge(-1,-1))
a = [int(0) for i in range(N)]
ru = [int(0) for i in range(N)]
head = [int(-1) for i in range(N)]
dp = [int(0) for i in range(N)]
q = queue.Queue(maxsize = N)
def add(x,y):
global tot
tot=tot+1
e.append(Edge(y,head[x]))
head[x]=tot
def query_num(st, en):
q.put(1)
dp[1]=1
while q.empty() == False:
now = q.get()
#print(now)
i=head[now]
while i!=-1:
ru[e[i].to]-=1;
#print(e[i].to)
dp[e[i].to]=(dp[e[i].to]+dp[now])%MOD
if ru[e[i].to]==0:
q.put(e[i].to)
i=e[i].next
n,m=IA()
for i in range(m):
x,y,z=IA()
add(x,y)
ru[y]+=1
query_num(1,n)
print(dp[n])
C++
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
const int mod = 20010905;
int num[N], w[N];
int en, head[N];
struct Edge {
int to, nxt;
} e[N << 1];
queue<int>q;
inline void add(int x, int y)
{
e[++en].to = y;
e[en].nxt = head[x];
head[x] = en;
}
int main()
{
register int n, m;
scanf("%d %d", &n, &m);
for (register int i = 1, x, y, z; i <= m; ++i) {
scanf("%d %d %d", &x, &y, &z);
add(x, y);
++num[y];
}
q.push(1);
w[1] = 1;
while (q.size()) {
register int now = q.front(); q.pop();
for (register int i = head[now]; i; i = e[i].nxt) {
--num[e[i].to];
w[e[i].to] = (w[e[i].to] + w[now]) % mod;
if (!num[e[i].to]) {
q.push(e[i].to);
}
}
}
printf("%d\n", w[n]);
return 0;
}
E Exams
鏈接:https://ac.nowcoder.com/acm/contest/3947/E
來源:牛客網
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
題目描述
Nancy是老師的小幫手!
衆所周知,大學的學分績點十分難以計算 。
一門課程,有必修、限選、任選之分,而其成績,又由平時成績、期中考試、期末考試之分,最後還要對總分數進行四捨五入。
具體的,一名同學的學分績點是這樣計算的:
- 計算且僅計算必修和限選課程
- 根據平時成績、期中成績、期末成績對應的不同比例求和,並四捨五入到整數
- 學分績點爲各門課成績乘以學分佔總學分的比例
- 對計算結果進行四捨五入(保留兩位小數)
下面你知道了Nancy的成績單,請你計算其最終學分績點。
輸入描述:
第一行:一個整數n,表示Nancy本學期修讀了n門課程
接下來n行:每行一個整數和七個實數,表示課程性質(0爲必修,1爲限選,2爲任選),學分,平時成績及其比例,期中考試及其比例,期末考試及其比例,保證比例之和爲1,且實數最多有一位小數。
數據滿足1≤n≤641 \leq n \leq 641≤n≤64,課程性質∈{0,1,2}\in\{0,1,2\}∈{0,1,2},學分∈[1,16]\in[1,16]∈[1,16]成績∈[0,100]\in[0, 100]∈[0,100],比例∈[0,1]\in[0,1]∈[0,1],數據保證至少有一門必修或限選課。
輸出描述:
共一行:表示Nancy的學分績點。
示例1
輸入
[複製](javascript:void(0)😉
5
0 1 97 1 0 0 0 0
0 2.5 98 0.3 0 0 92 0.7
0 4 100 0.3 0 0 100 0.7
0 1 0 0 0 0 74 1
0 2 94 1 0 0 0 0
輸出
[複製](javascript:void(0)😉
94.67
分析
模擬即可,注意四捨五入
代碼
import sys
sys.setrecursionlimit(10 ** 9)
IA = lambda: [float(x) for x in input().split()]
IM = lambda N: [IA() for _ in range(N)]
# !/usr/bin/env python3
# -*- coding: utf-8 -*-
N = 100005
x = [float(0) for i in range(N)]
sum1 = [int(0) for i in range(N)]
xue = [float(0) for i in range(N)]
n=int(input())
sum=float(0)
sum2=float(0)
for i in range(0,n):
x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7] = IA()
if (x[0] == 2): continue
sum1[i]=int(x[2]*x[3]+x[4]*x[5]+x[6]*x[7]+0.5)
sum2+=x[1]
xue[i]=x[1]
for i in range(0,n):
sum+=sum1[i]*(xue[i]/sum2)
print('%.2f' %sum)
F Fool Problem
鏈接:https://ac.nowcoder.com/acm/contest/3947/F
來源:牛客網
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
題目描述
Nancy喜歡斐波那契數列!
若f0=0,f1=1,f2=1f_0=0,f_1=1,f_2=1f0=0,f1=1,f2=1,請求:fn+1fn−1−fn2(n≥2)f_{n+1}f_{n-1}-f_n^2(n\geq2)fn+1fn−1−fn2(n≥2),其中fif_ifi表示斐波那契數列第i項。
輸入描述:
共一行:一個整數n。
數據滿足:2≤n≤1020202 \leq n \leq 10^{2020}2≤n≤102020。
輸出描述:
共一行:表示表達式的值。
示例1
輸入
[複製](javascript:void(0)😉
2
輸出
[複製](javascript:void(0)😉
1
代碼
import sys
sys.setrecursionlimit(10 ** 9)
IA = lambda: [int(x) for x in input().split()]
IM = lambda N: [IA() for _ in range(N)]
# !/usr/bin/env python3
# -*- coding: utf-8 -*-
N = 100005
a = [int(0) for i in range(N)]
n=IA()
if n[0]%2==0:
print(1)
else:
print(-1)
G Game
鏈接:https://ac.nowcoder.com/acm/contest/3947/G
來源:牛客網
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
題目描述
Nancy喜歡博弈!
Johnson和Nancy得到了一個神奇的多重集合,僅包含一個正整數n,兩個人輪流進行操作。
一次操作可以將集合中一個數字分解爲它的任意兩個非1的因數,並加入集合中。
他們想知道,在Johnson和Nancy絕頂聰明的情況下,如果Nancy先手進行操作,最後誰沒有辦法繼續操作了呢?
輸入描述:
第一行:一個整數n。
數據滿足:1≤n≤957181 \leq n \leq 957181≤n≤95718。
輸出描述:
共一行:一個字符串,表示最後誰(Johnson或者Nancy)無法進行操作。
示例1
輸入
[複製](javascript:void(0)😉
4
輸出
[複製](javascript:void(0)😉
Johnson
分析
不難發現某一個數字的質因子個數是一定的,計算其質因子個數來探究可分解的步數進行博弈即可。
其實最後只需要考慮質因子個數的奇偶性。
代碼
import sys
import queue
sys.setrecursionlimit(10 ** 9)
IA = lambda: map(int, input().split())
IAL = lambda: list(map(int, input().split()))
IM = lambda N: [IA() for _ in range(N)]
# !/usr/bin/env python3
# -*- coding: utf-8 -*-
N = 100005
def f(n):
num = int(0)
i = int(2)
temp=int(n)
while i*i <=temp:
if(temp%i==0):
while temp % i==0:
temp/=i
num+=1
i+=1
if temp >1:
num+=1
return num
n=int(input())
if n == 1 or n == 2:
print("Johnson")
elif f(n)%2 == 0:
print("Johnson")
else:
print("Nancy")
#include<iostream>
using namespace std;
#define LL long long
LL f(LL m)
{
LL sum = 0;
LL tmp = m;
for(LL i = 2; i*i<=tmp; i++)
if(tmp%i==0)
{
while(tmp%i==0)
{
tmp /= i;
sum++;
}
}
if(tmp>1)
sum++;
return sum;
}
int main()
{
LL n;
cin>>n;
//cout<<f(n)<<endl;
if(n==1||n==2)
printf("Johnson\n");
else if(f(n)%2==0)
printf("Johnson\n");
else
printf("Nancy\n");
return 0;
}
I、I love you
鏈接:https://ac.nowcoder.com/acm/contest/3947/I
來源:牛客網
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
題目描述
此時相望不相聞,願逐月華流照君。
一紙情書,到底蘊含了多少倍的愛情呢?
I love you, not only for what you are, but for what I am when I am with you.
輸入描述:
共一行:一封若干個字符的情書(大小寫不敏感)。
情書不會超過684594個字符(大寫、小寫字母)。
輸出描述:
共一行:包含一個整數,即iloveyou在情書中作爲子序列出現的次數。
由於答案可能很大,請輸出對20010905取模後的值。
示例1
輸入
[複製](javascript:void(0)😉
IloveyouNotonlyforwhatyouareButforwhatIamWhenIamwithyouIloveyouNotonlyforwhatYouhavemadeofyourselfButforwhatYouaremakingofme
輸出
[複製](javascript:void(0)😉
2864
分析
小思維
代碼
import sys
sys.setrecursionlimit(10 ** 9)
IA = lambda: [int(x) for x in input().split()]
IM = lambda N: [IA() for _ in range(N)]
# !/usr/bin/env python3
# -*- coding: utf-8 -*-
N = 100005
a = [int(0) for i in range(N)]
str=input().lower()
l=len(str)
a=int(0)
b=int(0)
c=int(0)
e=int(0)
f=int(0)
g=int(0)
h=int(0)
d=int(0)
MOD = int(20010905)
for i in range(0,l):
if str[i]=='i':a=(a+1)%MOD
if str[i]=='l':b=(b+a)%MOD
if str[i] == 'o': c = (c + b) % MOD
if str[i] == 'v': d=(d+c)%MOD
if str[i] == 'e': e=(e+d)%MOD
if str[i] == 'y': f=(f+e)%MOD
if str[i] == 'o': g=(g+f)%MOD
if str[i] == 'u': h=(h+g)%MOD
print(h)
#I love you Notonlyforwhat you areButforwhat I amWhen I amwith you I love you Notonlyforwhat You havemadeof your selfButforwhat You aremakingofme
J Jelly
鏈接:https://ac.nowcoder.com/acm/problem/201613
來源:牛客網
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
題目描述
Nancy喜歡吃果凍!
Nancy鑽進了一個n×n×nn \times n \times nn×n×n的果凍裏,她想從(1,1,1)一路上、下、左、右、前、後六個方向吃到(n,n,n)。
但果凍畢竟是有許多口味的,標記爲*的口味是Nancy不願意吃的,其餘的果凍均標記爲.。
Nancy不想吃壞肚子,於是她想儘可能少的吃果凍。
下面給出果凍的情況,請你幫忙計算一下她能吃多少塊果凍叭!
輸入描述:
第一行:一個整數n。
接下來n層,每組n行,每行n列,表示果凍(i,j,k)的情況(如題目描述所述)。
數據滿足:1≤n≤1001 \leq n \leq 1001≤n≤100,保證果凍(1,1,1)不是Nancy不願意吃的。
輸出描述:
如果可以到達(n,n,n),請輸出路上吃的果凍數量,否則請輸出-1。
示例1
輸入
[複製](javascript:void(0)😉
2
.*
..
*.
..
輸出
[複製](javascript:void(0)😉
4
分析
bfs即可,不過python依舊超時
代碼
import sys
import queue
sys.setrecursionlimit(10 ** 9)
IA = lambda: map(int, input().split())
IAL = lambda: list(map(int, input().split()))
IM = lambda N: [IA() for _ in range(N)]
# !/usr/bin/env python3
# -*- coding: utf-8 -*-
class Node:
def __init__(self,x,y,z,step):
self.x=0
self.y=0
self.z=0
self.step=0
dx=[0,0,0,0,1,-1]
dy=[0,0,1,-1,0,0]
dz=[1,-1,0,0,0,0]
N = 105
n=int(input())
mp = [[[int(0) for i in range(n)] for i in range(n)] for i in range(n)]
vis = [[[int(0) for i in range(n)] for i in range(n)] for i in range(n)]
for i in range(0,n):
for j in range(0,n):
s=input()
for k in range(0,n):
if s[k]=='*':
mp[i][j][k]=-1
q=queue.Queue()
q.put(Node(0,0,0,0))
vis[0][0][0]=1
ans=int(1e9)
flag=int(0)
while q.empty()==False :
a=q.get()
for i in range(0,6):
b = Node(0, 0, 0, 0)
b.x=a.x+dx[i]
b.y=a.y+dy[i]
b.z=a.z+dz[i]
b.step=a.step+1
#print(str(b.x) + " " + str(b.y) + " " + str(b.z)+" "+str(mp[b.x][b.y][b.z]))
if(b.x>=0 and b.x<n and b.y>=0 and b.y<n and b.z>=0 and b.z<n and mp[b.x][b.y][b.z]!=-1 and vis[b.x][b.y][b.z]==0):
q.put(b)
vis[b.x][b.y][b.z]=1
#print(str(b.x)+" "+str(b.y)+" "+str(b.z))
if(b.x==n-1 and b.y==n-1 and b.z==n-1):
ans=b.step
flag=1
break
if flag==1:break
if ans==1e9:print(-1)
else:print(ans+1)
#include<bits/stdc++.h>
#define ll long long
const ll mod=20010905;
using namespace std;
const int maxn=100+10;
int mp[maxn][maxn][maxn];
bool vis[maxn][maxn][maxn];
int dx[]={1,-1,0,0,0,0};
int dy[]={0,0,1,-1,0,0};
int dz[]={0,0,0,0,1,-1};
struct Node
{
int x,y,z;
int step;
Node(int x,int y,int z,int step):x(x),y(y),z(z),step(step){}
};
int n;
void f()
{
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
for(int k=1; k<=n; k++)
{
char a;
cin>>a;
if(a=='.')
mp[i][j][k]=1;
else
mp[i][j][k]=0;
}
queue<Node >Q;
Q.push(Node(1,1,1,1));
vis[1][1][1]=1;
int ans=1e9+1;
while(!Q.empty())
{
Node node=Q.front();
Q.pop();
int x=node.x,y=node.y,z=node.z;
int step=node.step;
if(x==n&&y==n&&z==n)
{
ans=min(ans,step);
continue;
}
for(int i=0;i<6;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
int nz=z+dz[i];
if(nx<1||nx>n) continue;
if(ny<1||ny>n) continue;
if(nz<1||nz>n) continue;
if(vis[nx][ny][nz]) continue;
if(mp[nx][ny][nz]==0) continue;
vis[nx][ny][nz]=1;
Q.push(Node(nx,ny,nz,step+1));
}
}
if(ans==1e9+1)
cout<<"-1"<<endl;
else
cout<<ans<<endl;
}
int main()
{
cin>>n;
f();
return 0;
}