关闭

【GZOJ】1314——异或最大值

标签: 新手入门acm周赛题解
319人阅读 评论(0) 收藏 举报
分类:

题目链接广大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;
    }
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3323次
    • 积分:130
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档