zoukankan      html  css  js  c++  java
  • hdu 6186 CS Course

    CS Course

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 52    Accepted Submission(s): 30


    Problem Description
    Little A has come to college and majored in Computer and Science.

    Today he has learned bit-operations in Algorithm Lessons, and he got a problem as homework.

    Here is the problem:

    You are giving n non-negative integers a1,a2,,an, and some queries.

    A query only contains a positive integer p, which means you 
    are asked to answer the result of bit-operations (and, or, xor) of all the integers except ap.
     
    Input
    There are no more than 15 test cases. 

    Each test case begins with two positive integers n and p
    in a line, indicate the number of positive integers and the number of queries.

    2n,q105

    Then n non-negative integers a1,a2,,an follows in a line, 0ai109 for each i in range[1,n].

    After that there are q positive integers p1,p2,,pqin q lines, 1pin for each i in range[1,q].
     
    Output
    For each query p, output three non-negative integers indicates the result of bit-operations(and, or, xor) of all non-negative integers except ap in a line.
     
    Sample Input
    3 3 1 1 1 1 2 3
     
    Sample Output
    1 1 0 1 1 0 1 1 0
     
    记录前缀后缀跑一遍就可以了。
    ac代码:
    #include <cstdio>
    #include <iostream>
    #include <cstring>
    using namespace std;
    int a[100001];
    int zand[100001];
    int zand1[100001];
    int zxor[100001];
    int zxor1[100001];
    int zor[100001];
    int zor1[100001];
    int main()
    {
        int n,q;
        while(~scanf("%d %d",&n,&q))
        {
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&a[i]);
                if(i==1)
                {
                    zand[i]=a[i];
                    zor[i]=a[i];
                    zxor[i]=a[i];
                }
                else
                {
                    zand[i]=(a[i]&zand[i-1]);
                    zor[i]=(a[i]|zor[i-1]);
                    zxor[i]=(a[i]^zxor[i-1]);
                }
            }
            zand1[n]=zor1[n]=zxor1[n]=a[n];
            for(int i=n-1;i>=1;i--)
            {
                 zand1[i]=(a[i]&zand1[i+1]);
                 zor1[i]=(a[i]|zor1[i+1]);
                 zxor1[i]=(a[i]^zxor1[i+1]);
            }
            while(q--)
            {
                int x;
                scanf("%d",&x);
                if(x==1)
                {
                    cout<<zand1[2]<<' '<<zor1[2]<<' '<<zxor1[2]<<endl;
                }
                else if(x==n)
                {
                    cout<<zand[n-1]<<' '<<zor[n-1]<<' '<<zxor[n-1]<<endl;
                }
                else
                {
                    cout<<(zand[x-1]&zand1[x+1])<<' '<<(zor[x-1]|zor1[x+1])<<' '<<(zxor[x-1]^zxor1[x+1])<<endl;
                }
            }
        }
    
        return 0;
    }
  • 相关阅读:
    jQuery学习笔记(一):入门
    jQuery学习笔记(二):this相关问题及选择器
    数据库基础
    有关程序员转行的想法
    在团队中如何带领新手——阅读有感
    C#中的集合类——ArrayList
    .NET基础——ASSCII码表
    C#中的文件操作2
    C#中的文件操作1
    C#中的StringBuilder
  • 原文地址:https://www.cnblogs.com/z1141000271/p/7459914.html
Copyright © 2011-2022 走看看