Mach_Cap的博客

El Psy Congroo.这一切都是斯坦因之门的选择。

【GZOJ】1314——异或最大值

题目链接广大OJ1314
本题亦为广大15级第一次周赛的G题。

题目内容

Problem Description
小布除了经常能在野外遇到不明生物外还非常喜欢由非负数组成的数组, 有一天他的获得了一个由n个非负数组成的数组

而小布想在数组中找到一段连续的数字,使得这段数字异或起来的值是最大的

例如这个数组是 1, 2, 5, 7, 8

那么 (2,5,7) 是一段连续的数字, 这段数字异或起来的值为 2 ^ 5 ^ 7 = 0

(1, 2) 也是一段连续的数字,这段数字异或起来的值为 1 ^ 2 = 3

其中异或起来最大的连续数字段为 (7,8) 值为 7 ^ 8 = 15

Input
输入数据第一行是一个整数 T, 接下来有 T个例子

每个例子第一行是一个整数 n, 接下来是n个小于等于1000的非负整数 ( 1 <= n <= 100)

Output
对于每个例子输出 异或起来的值最大的 那个连续的数字段 异或起来的值

Sample Input
3
1
1
2
2 3
5
1 2 5 7 8
Sample Output
1
3
15

解题思路

首先,请相信计算机的性能
最多100个数,完全可以暴力解决。
把所有的情况列出来,选出最大的即可。

代码

#include<iostream>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        int a[1001],max=0;
        for(int i=0;i<n;i++)cin>>a[i];
        for(int i=1;i<=n;i++)
        {
            for(int j=0;j+i<=n;j++)
            {
                int p;
                for(int k=j,kk=0;kk<i;k++,kk++)
                {
                    if(kk==0)p=a[k];
                    else p^=a[k];
                }
                if(max<p)max=p;
            }
        }
        cout<<max<<endl;
    }
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mach_Cap/article/details/49915145
个人分类: 水题 周赛题解 GZOJ
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

【GZOJ】1314——异或最大值

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭