• 2017ICPC/广西邀请赛1005(水)HDU6186


    CS Course

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


    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,,pq in 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
    题意  求n个整数(除去) 二进制位运算 和 或 异或的结果
    解析   求出前后缀询问时直接前缀后缀计算 
    AC代码
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <stdlib.h>
    #include <iostream>
    #include <sstream>
    #include <algorithm>
    #include <string>
    #include <queue>
    #include <vector>
    using namespace std;
    const int maxn= 1e5 + 10;
    const int inf = 0x3f3f3f3f;
    typedef long long ll;
    int n,m;
    int sum1[maxn],sum2[maxn],sum3[maxn];
    int rsum1[maxn],rsum2[maxn],rsum3[maxn];
    int a[maxn];
    int main(int argc, char const *argv[])
    {
        while(scanf("%d %d",&n,&m)==2)
        {
            scanf("%d",&a[1]);
            sum1[1]=sum2[1]=sum3[1]=a[1];
            for(int i=2;i<=n;i++)
            {
                scanf("%d",&a[i]);
                sum1[i]=sum1[i-1] & a[i];
                sum2[i]=sum2[i-1] | a[i];
                sum3[i]=sum3[i-1] ^ a[i];
            }
            rsum1[n]=rsum2[n]=rsum3[n]=a[n];
            for(int i=n-1;i>=1;i--)
            {
                rsum1[i]=rsum1[i+1] & a[i];
                rsum2[i]=rsum2[i+1] | a[i];
                rsum3[i]=rsum3[i+1] ^ a[i];
                //cout<<rsum1[i]<<" "<<rsum2[i]<<" "<<rsum3[i]<<endl;
            }
            int q;
            while(m--)
            {
                scanf("%d",&q);
                if(q==1)
                    printf("%d %d %d
    ",rsum1[2],rsum2[2],rsum3[2]);
                else if(q == n) 
                    printf("%d %d %d
    ",sum1[n-1],sum2[n-1],sum3[n-1]);  
                else 
                    printf("%d %d %d
    ",sum1[q-1] & rsum1[q+1],sum2[q-1]|rsum2[q+1],sum3[q-1]^rsum3[q+1]);
            }
        }
        return 0;
    }
  • 相关阅读:
    spring-boot整合dubbo:Spring-boot-dubbo-starter
    基于Spring的轻量级工作流框架
    Spring多种加载Bean方式简析
    Spring Dubbo 开发笔记
    基于Spring开发——自定义标签及其解析
    Navicat连接MySQL8.0亲测有效
    学习Python中遇到的各种错误
    字符串转字典
    set(待整理)
    C++中虚析构的作用
  • 原文地址:https://www.cnblogs.com/stranger-/p/7476302.html
Copyright © 2020-2023  润新知