• [JZOJ4274] 终章-剑之魂


    Description

      【题目描述】
      My soul of my sowrd!
      终焉的试炼即将到来,作为一名有修养的剑士,虽然没有习得n刀流但是二刀流还是没问题的。然而我也是个剑的收藏者,家里屯着n把剑,每一把剑都有一个灵魂值a[i],由于一些剑之间可能有共鸣,所以我需要两把契合度最高的剑。据剑圣所说,两把编号为i,j剑的契合度为a[i] and a[j]。如何深得剑的灵魂呢?
      注:AND 为按位与运算,先将数转成二进制,不满位数的补全0,然后成为两个长度相同的二进制数,处理的时候,两个相应的二进制位都为1,该位的结果值才为1,否则为0。例下图。

    Input

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

    Output

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

    Sample Input

      5
      12 5 6 3 1

    Sample Output

      4
      【样例解释】
      5 and 6=4或者12 and 5=4或者12 and 6=4

    Data Constraint

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

    Summary

      可以发现,要尽量选高位的1,这样比低位全都是1还大,那么我们要选两个较大的a[i],可以先给a从大到小排序,再n^2枚举,比已有答案小就break。

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 long long a[1500000];
     5 int n;
     6 int main()
     7 {
     8     freopen("sword.in","r",stdin);
     9     freopen("sword.out","w",stdout);
    10     scanf("%d",&n);
    11     for (int i=1;i<=n;i++)
    12         scanf("%lld",&a[i]);
    13     sort(a+1,a+n+1);
    14     long long max=0;
    15     for (int i=n;i>=2;i--)
    16         if ((a[i]&a[i-1])>=max)
    17                 max=a[i]&a[i-1];
    18         else break;
    19     printf("%d",max);
    20     fclose(stdin);fclose(stdout);
    21 }
    View Code
  • 相关阅读:
    FreeRTOS移植到Cortex-M3-M4
    码位颠倒C程序
    开平方与魔数0x5F3759DF:Quake III 开源代码
    MathJax: Web 页面显示数学公式
    Notepad++ NppExport: 让你在Microsoft word 中粘贴语法高亮代码
    [转]matlab 函数三种定义方式
    机器上的几种Eclipse
    自己开发CC3000模块
    Java中的线程的生命周期大体可分为5种状态
    srand和rand的用法和联系
  • 原文地址:https://www.cnblogs.com/Tokisaki-Kurumi/p/9315990.html
Copyright © 2020-2023  润新知