首页 > 其他 > 详细

小a与星际探索

时间:2019-01-26 16:58:34      阅读:156      评论:0      收藏:0      [点我收藏+]

链接:https://ac.nowcoder.com/acm/contest/317/C
来源:牛客网

小a正在玩一款星际探索游戏,小a需要驾驶着飞船从11号星球出发前往nn号星球。其中每个星球有一个能量指数pp。星球ii能到达星球jj当且仅当pi>pjpi>pj。
同时小a的飞船还有一个耐久度tt,初始时为11号点的能量指数,若小a前往星球jj,那么飞船的耐久度会变为tpjt⊕pj(即tt异或pjpj,关于其定义请自行百度)
小a想知道到达nn号星球时耐久度最大为多少
注意:对于每个位置来说,从它出发可以到达的位置仅与两者的pp有关,与下标无关

输入描述:

第一行一个整数nn,表示星球数
接下来一行有nn个整数,第ii个整数表示pipi

输出描述:

一个整数表示到达nn号星球时最大的耐久度
若不能到达nn号星球或到达时的最大耐久度为00则输出?1?1
示例1

输入

复制
3
457 456 23

输出

复制
478

说明

小a有两种方法到达33号星球
第一种:1231→2→3,最终耐久度为45745623=22457⊕456⊕23=22
第二种:131→3,最终耐久度为45723=478457⊕23=478
示例2

输入

复制
4
2 4 4 2

输出

复制
-1
示例3

输入

复制
5
234 233 123 2333 23

输出

复制
253

备注:

1?n,?pi?30001?n,?pi?3000

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 5005;
int a[maxn];
int b[maxn];
int vis[maxn], n;
void dfs(int d, int u){
    if (vis[d] || u >= n)return;
    vis[d] = 1;
    for (int i = 2; i <= n; ++i){
        if (d > a[i]){
            int t = d^a[i];
            b[i] = max(b[i], t);
            if (!vis[t])dfs(t, i);        //如果出现过的话就不再就不可以。
        }
    }
}

int main()
{
    cin >> n;
    for (int i = 1; i <= n; ++i)
        cin >> a[i];
    dfs(a[1], 1);
    if (b[n])cout << b[n] << endl;
    else cout << -1 << endl;
}

 

小a与星际探索

原文:https://www.cnblogs.com/ALINGMAOMAO/p/10323843.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!