HDU4876ZCC loves cards(多校题)

HDU4876ZCC loves cards(多校题)

大家好,又见面了,我是全栈君。

ZCC loves cards

Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 2362 Accepted Submission(s): 590

Problem Description
ZCC loves playing cards. He has n magical cards and each has a number on it. He wants to choose k cards and place them around in any order to form a circle. He can choose any several
consecutive cards the number of which is m(1<=m<=k) to play a magic. The magic is simple that ZCC can get a number x=a1⊕a2…⊕am, which ai means the number on the ith card he chooses. He can play the magic infinite times, but
once he begin to play the magic, he can’t change anything in the card circle including the order.

ZCC has a lucky number L. ZCC want to obtain the number L~R by using one card circle. And if he can get other numbers which aren’t in the range [L,R], it doesn’t matter. Help him to find the maximal R.

Input
The input contains several test cases.The first line in each case contains three integers n, k and L(k≤n≤20,1≤k≤6,1≤L≤100). The next line contains n numbers means the numbers on the n cards. The ith number a[i] satisfies 1≤a[i]≤100.

You can assume that all the test case generated randomly.

Output
For each test case, output the maximal number R. And if L can’t be obtained, output 0.

Sample Input
   
   
4 3 1 2 3 4 5

Sample Output
   
   
7
Hint
⊕ means xor

Author
镇海中学

Source

题意:给n个数。从中选出k个数,这k个数能够随意排列,一旦定了顺序就不能改变,在这个确定的顺序。选出m(m<=k)个数异或得到的值x,在这个顺序得到的全部x的值中找出一个最大值R,这些数中使得存在一个连续的范围L~R。

#include<stdio.h>
#include<string.h>
int n,k,L,ans[25];
int a[13],aa[13],R,flag[150];
int vist[10];
void find(int tk)
{
    if(tk==k-1)
    {
        memset(flag,0,sizeof(flag));
        for(int i=0;i<k-1;i++)
        a[i+k]=a[i];
        int maxa=0;
        for(int i=0;i<k;i++)//枚举一个确定序列的连续片断的异或值
        {
            int x=a[i]; flag[x]=1; if(maxa<x)maxa=x;
            for(int j=i+1;j-i+1<=k;j++)
            {
                x^=a[j]; flag[x]=1;if(maxa<x)maxa=x;
            }
        }
        int r=0;
        for(int i=L;i<=maxa;i++)//找出这个最大值R,使得这些数存在L~R范围的数都存在。
        if(flag[i]==0)break;
        else r=i;
        if(r>R)R=r;
        return ;
    }
    tk++;
    for(int i=0;i<k;i++)
    if(vist[i]==0)
    {
        a[tk]=aa[i]; vist[i]=1; find(tk); vist[i]=0;
    }
}
bool panduan()//放宽条件(随意顺序)推断
{
    memset(flag,0,sizeof(flag));
    int maxa=0;
    for(int i=1;i<(1<<k);i++)
    {
        int x=0;
        for(int j=0;(1<<j)<=i;j++)
        if((1<<j)&i)x^=aa[j];
        flag[x]=1;
        if(maxa<x)maxa=x;
    }
    int r=0;
    for(int i=L;i<=maxa;i++)
    if(flag[i]==0)break;
    else r=i;
    return r>R;
}
void CNM(int tk,int i)
{
    if(tk==k-1)
    {
        if(panduan())
        find(-1);
        return ;
    }
    tk++;
    for(int j=i+1;j<n;j++)
    {
        aa[tk]=ans[j]; CNM(tk,j);
    }
}
int main()
{
    while(scanf("%d%d%d",&n,&k,&L)>0)
    {
        R=0; memset(vist,0,sizeof(vist));
        for(int i=0;i<n;i++)
        scanf("%d",&ans[i]);
        CNM(-1,-1);
        printf("%d\n",R);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116456.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Android9.0_P:ClassNotFoundException:Didn’t find class “org.apache.http.ProtocolVersion” on path:

    Android9.0_P:ClassNotFoundException:Didn’t find class “org.apache.http.ProtocolVersion” on path:

  • Oracle insert all 详解

    Oracle insert all 详解文章目录1概述2insert的两种形式2.1insertfirst2.2insertall3数据一致性(同时插入)2.1验证:insertinto数据不一致2.2验证:insertall数据一致1概述1.作用:’正确、高效’的将’同一批数据’插入至’不同的表’中2.好处(1)’正确’:避免数据差异(2)’高效’:优于写多个insertinto(因为无论插入多少张表,’主表’只会被读取一次)3.场景,若需求:将表t中

  • pycharm连接mysql数据库操作「建议收藏」

    pycharm连接mysql数据库操作「建议收藏」pycharm怎么能连接到数据库呢?打开pycharm,然后选择右侧的database 然后选择添加数据来源,选择mysql ,然后再右侧输入host地址 ,database是你数据库的名称,还有你远程登陆的用户和密码,这里要提示下驱动的问题,最下面需要添加驱动,我这里已经添加过了,输入的账户和密码没有问题,可以进行testConnection进行验证连接成功没有问题就可…

  • 一文概括常用图像处理算法

    一文概括常用图像处理算法本文总结了11种常用的图像处理算法,包含了预处理算法以及检测算法,并介绍了一些常用的开发库。一、算法(预处理算法、检测算法)在采集完图像后,首先会对图像进行预处理操作。1、图像变换(空域与频域、几何变换、色度变换、尺度变换)2、图像增强3、纹理分析(取骨架、连通性)4、图像分割5、图像特征6、图像/模板匹配7、色彩分析8、图像数据编码压缩和传输9、表面缺陷目标识别算法10、图像分类(识别)11、图像复原二、现有的视觉检测软件/库三、HSV颜色识别-HSV基本颜色分量范围

  • 如何利用eclipse创建一个java web项目?「建议收藏」

    如何利用eclipse创建一个java web项目?「建议收藏」1.在左侧空白处,右键选择New->DynamicWebProject2.若New的选择列表中没有DynamicWebProject,则选择Others,然后输入dynamic(一般输入dy就可以),选择DynamicWebProject3.输入项目名称,选择运行时环境(中间件环境),选择web相应的版本。4.点击Finish

  • 谷歌学术使用方法_想用谷歌浏览器怎么办

    谷歌学术使用方法_想用谷歌浏览器怎么办谷歌学术简明使用说明源PDF文件下载链接:https://github.com/zjcao/books/blob/master/google_scholar_instructions.pdf

    2022年10月11日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号