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.

2≤n,q≤105

Then n non-negative integers a1,a2,?,an

follows in a line, 0≤ai≤109

for each i in range[1,n].

After that there are q positive integers p1,p2,?,pq

in q lines, 1≤pi≤n

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\n",rsum1[2],rsum2[2],rsum3[2]);
            else if(q == n)
                printf("%d %d %d\n",sum1[n-1],sum2[n-1],sum3[n-1]);
            else
                printf("%d %d %d\n",sum1[q-1] & rsum1[q+1],sum2[q-1]|rsum2[q+1],sum3[q-1]^rsum3[q+1]);
        }
    }
    return 0;
}
时间: 2024-10-26 19:09:04

2017ICPC/广西邀请赛1005(水)HDU6186的相关文章

2017ICPC/广西邀请赛1001(水)HDU6181

A Math Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 817    Accepted Submission(s): 344 Problem Description You are given a positive integer n, please count how many positive integers

2017 ICPC 广西邀请赛1005 CS Course

CS Course Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 0    Accepted Submission(s): 0 Problem Description Little A has come to college and majored in Computer and Science. Today he has learne

HDU 4847 陕西邀请赛A(水)

HDU 4847 Wow! Such Doge! 题目链接 题意:给定文本,求有几个doge,不区分大小写 思路:水题,直接一个个读字符每次判断即可 代码: #include <stdio.h> #include <string.h> char c; char a[5]; int main() { a[5] = '\0'; int ans = 0; while ((c = getchar()) != EOF) { if (c >= 'a' && c <=

HDU - 4788 Hard Disk Drive (成都邀请赛H 水题)

HDU - 4788 Hard Disk Drive Time Limit:1000MS   Memory Limit:32768KB   64bit IO Format:%I64d & %I64u [Submit]  [Go Back]  [Status] Description Yesterday your dear cousin Coach Pang gave you a new 100MB hard disk drive (HDD) as a gift because you will

2017 ICPC 广西邀请赛1004 Covering

Covering Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 187    Accepted Submission(s): 107 Problem Description Bob's school has a big playground, boys and girls always play games here after sch

HDU6186 2017广西邀请赛 CS Course (前缀和后缀)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6186 思路:题目要求的删除第q个数候所有数的 & | ^和,所以提前求出前缀和后缀,每次& | ^ 前i-1个和后i+1个即可.注意a^b^b=a; #include <iostream> #include <cstdio> using namespace std; const long long maxn=1e5+10; int n,q; long long f1[m

2017 ACM/ICPC 广西邀请赛 题解

题目链接  Problems HDOJ上的题目顺序可能和现场比赛的题目顺序不一样, 我这里的是按照HDOJ的题目顺序来写的. Problem 1001 签到 #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i) typedef long long LL; LL n, f[31]; int ans; int main(){ f[1] = 1LL; fo

2017ACM/ICPC广西邀请赛-重现赛(感谢广西大学)

A Math Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 0    Accepted Submission(s): 0 Problem Description You are given a positive integer n, please count how many positive integers k sa

2017广西邀请赛 Query on A Tree (可持续化字典树)

Query on A Tree 时间限制: 8 Sec  内存限制: 512 MB提交: 15  解决: 3[提交][状态][讨论版] 题目描述 Monkey A lives on a tree. He always plays on this tree.One day, monkey A learned about one of the bit-operations, xor. He was keen of this interesting operation and wanted to pr