zoukankan      html  css  js  c++  java
  • 庭师的利刃(2018江苏冬令营3 )

    6358: 庭师的利刃

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 592  解决: 164
    [提交] [状态] [讨论版] [命题人:admin]

    题目描述

    作为白玉楼的庭师,妖梦虽然不会n刀流,但是却领悟了生命二刀流。然而我也是个剑的收藏者,家里屯着n把剑,每一把剑都有一个灵魂值a[i],由于一些剑之间可能有共鸣,所以我需要两把契合度最高的剑。据妖梦所说,两把编号为i,j剑的契合度为a[i] and a[j]。如何深得剑的灵魂呢?(即求最大值)

    输入

    第一行一个整数n,代表藏剑数。
    第二行n个整数,第i个整数表示a[i]。

    输出

    输出包含一个正整数,最好的两把剑的契合度。

    样例输入

    5
    12 5 6 3 1

    样例输出

    4

    提示

    对于40%的数据 n ≤ 1,000
    对于100%的数据 n ≤ 1,000,000,0 ≤ a[i] < 2^31

    来源/分类

    2018江苏冬令营3 

    题解:从高位到低位枚举,保证前面最大的同时,让后面尽可能大,(ans&a[j]) == ans) 该语句保证前面最大, (a[j]&dig) == dig 该语句保证让后面尽可能大,若有两个,就更新ans

    code:

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    
    const int N = 1e6+10;
    ll a[N];
    int n;
    
    void solve()
    {
        ll ans = 0;
        for(int i = 30;i >= 0;i--)
        {
            int cont = 0;
            ll dig = 1ll<<i;
            for(int j = 1;j <= n;j++)
            {
                if(((ans&a[j]) == ans) && ((a[j]&dig) == dig))
                    cont++;
                if(cont >= 2)   break;
            }
            if(cont >= 2)
                ans += dig;
        }
        printf("%lld
    ",ans);
    }
    int main()
    {
        scanf("%d",&n);
        for(int i = 1;i <= n;i++)   scanf("%lld",a+i);
        solve();
        return 0;
    }
  • 相关阅读:
    shell 案例
    linux 软链接和硬链接区别
    mac安装使用nginx
    Leetcode SQL_#176_第二高的薪水
    南邮ctf web题记录(上)
    CTFHub Web技能树
    XCTF web 新手练习区
    诊断工具--arthas使用教程
    prometheus--监控工具
    无状态状态机--cola stateMachine
  • 原文地址:https://www.cnblogs.com/lemon-jade/p/9352903.html
Copyright © 2011-2022 走看看