時間限制:c/c++ 1秒,其他語言2秒
空間限制:c/c++ 32768k,其他語言65536k
64bit io format: %lld
小a正在玩一款星際探索遊戲,小a需要駕駛著飛船從1
'>11號星球出發前往n
'>nn號星球。其中每個星球有乙個能量指數p
'>pp。星球i
'>ii能到達星球j
'>jj當且僅當p
i>pj
'>pi
>pj
pi>pj。
同時小a的飛船還有乙個耐久度t
'>tt,初始時為1
'>11號點的能量指數,若小a前往星球j
'>jj,那麼飛船的耐久度會變為t⊕p
j'>t⊕pj
t⊕pj(即t
'>tt異或p
j'>pj
'>nn號星球時耐久度最大為多少
注意:對於每個位置來說,從它出發可以到達的位置僅與兩者的p
'>pp有關,與下標無關
第一行乙個整數n'>nn,表示星球數
接下來一行有n
'>nn個整數,第i
'>ii個整數表示p
i'>pipi
乙個整數表示到達n示例1'>nn號星球時最大的耐久度
若不能到達n
'>nn號星球或到達時的最大耐久度為0
'>00則輸出−
1'>−1−1
複製
3457 456 23
複製
478
小a有兩種方法到達3'>33號星球
第一種:1→2
→3'>1→2→31→2→3,最終耐久度為457
⊕456⊕23
=22'>457⊕456⊕23=22457⊕456⊕23=22
第二種:1→3
'>1→31→3,最終耐久度為457⊕23
=478
'>457⊕23=478457⊕23=478
示例2複製
42 4 4 2
複製
-1
示例3複製
5234 233 123 2333 23
複製
253
1⩽n這個題目可以處理一下,也可以不處理,差不多。,∀pi
⩽3000
'>1⩽n,∀pi⩽30001⩽n,∀pi⩽3000
這個bfs,需要用vis標記一下,這個vis標記,是去標記這個得到的數值。
這個是為了不超記憶體,讓盡量少的數進入佇列。
還要注意的就是這個題目的理解,應該是只要耐久度大於想去的星球才可以降落。
#include #include #include #include #include #include #define inf 0x3f3f3f3fusing namespace std;
const int maxn = 3e4;
int a[maxn], b[maxn],k, ans= -1;
bool vis[maxn];
int n;
struct node
};void bfs()
if (vis[y^b[i]]) continue;
vis[y^b[i]] = true;
que.push(node(i, y^b[i]));
} }}int main()
for (int i = 1; i <= n; i++)
bfs();
printf("%d\n", ans);
return 0;
}
牛客 小a與星際探索
注意 對於每個位置來說,從它出發可以到達的位置僅與兩者的pp有關,與下標無關 第一行乙個整數nn,表示星球數 接下來一行有nn個整數,第ii個整數表示pipi乙個整數表示到達nn號星球時最大的耐久度 若不能到達nn號星球或到達時的最大耐久度為00則輸出 1 1示例1 複製3 457 456 23複製...
小a與星際探索
題目描述 第一行乙個整數n,表示星球數 接下來一行有n個整數,第i個整數表示pi 輸出描述 乙個整數表示到達n號星球時最大的耐久度 若不能到達n號星球或到達時的最大耐久度為0則輸出 1 示例1輸入 3457 456 23 輸出 478說明 小a有兩種方法到達3號星球 第一種 1 2 3,最終耐久度為...
小a與星際探索 dp
輸入描述 第一行乙個整數n,表示星球數 接下來一行有n個整數,第i個整數表示pi 輸出描述 乙個整數表示到達n號星球時最大的耐久度 若不能到達n號星球或到達時的最大耐久度為0則輸出 1輸入3 457 456 23 輸出478 說明小a有兩種方法到達3號星球 第一種 1 2 3,最終耐久度為457 4...