HDU 5968 异或密码

来源:互联网 发布:mssql存储过程 游标 编辑:程序博客网 时间:2024/06/05 03:42

异或密码

来自中国大学生程序设计大赛的一道题。主要考察的是读题能力,穷举就可以了,总共100*100的。
把所有情况放在一个二维数组里面,第一行是单个一个的,第二行是两个异或,第三行放三个连续异或,类推到第n行,最后筛选结果。

#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>using namespace std;int a[102],b[102];int Map[102][102];int main(){    int i,j,t,n,k,A,m;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        for(i=0; i<n; i++)        {            scanf("%d",&a[i]);        }        memset(Map,0,sizeof(Map));        for(i=0; i<n; i++)        {            for(j=0; j<n-i; j++)            {                for(k=j; k<=j+i; k++)                    Map[i][j]=Map[i][j]^a[k];                    //printf("%d ",Map[i][j]);            }            //printf("\n");        }        scanf("%d",&m);        int l;        for(k=0; k<m; k++)        {            int minl=0xfffffff;            scanf("%d",&b[k]);            for(i=0; i<n; i++)            {                for(j=0; j<n-i; j++)                {                    if(abs(Map[i][j]-b[k])<minl)                    {                        minl=abs(Map[i][j]-b[k]);                        l=i+1;                    }                    if(i+1>l&&abs(Map[i][j]-b[k])==minl)                    l=i+1;                }            }            printf("%d\n",l);        }        printf("\n");    }    return 0;}




0 0
原创粉丝点击