• 【codeforces 742B】Arpa’s obvious problem and Mehrdad’s terrible solution


    time limit per test1 second
    memory limit per test256 megabytes
    inputstandard input
    outputstandard output
    There are some beautiful girls in Arpa’s land as mentioned before.

    Once Arpa came up with an obvious problem:

    Given an array and a number x, count the number of pairs of indices i, j (1 ≤ i < j ≤ n) such that , where is bitwise xor operation (see notes for explanation).

    Immediately, Mehrdad discovered a terrible solution that nobody trusted. Now Arpa needs your help to implement the solution to that problem.

    Input
    First line contains two integers n and x (1 ≤ n ≤ 105, 0 ≤ x ≤ 105) — the number of elements in the array and the integer x.

    Second line contains n integers a1, a2, …, an (1 ≤ ai ≤ 105) — the elements of the array.

    Output
    Print a single integer: the answer to the problem.

    Examples
    input
    2 3
    1 2
    output
    1
    input
    6 1
    5 1 2 3 4 1
    output
    2
    Note
    In the first sample there is only one pair of i = 1 and j = 2. so the answer is 1.

    In the second sample the only two pairs are i = 3, j = 4 (since ) and i = 1, j = 5 (since ).

    A bitwise xor takes two bit integers of equal length and performs the logical xor operation on each pair of corresponding bits. The result in each position is 1 if only the first bit is 1 or only the second bit is 1, but will be 0 if both are 0 or both are 1. You can read more about bitwise xor operation here: https://en.wikipedia.org/wiki/Bitwise_operation#XOR.

    【题目链接】:http://codeforces.com/contest/742/problem/B

    【题解】

    用个map记录1..i-1里面x xor a[i]的值有多少个;
    则那些数字都能和a[i]进行xor运算取得a[i];
    因为 a xor b = c
    则c xor b = a
    且c xor a = b;
    O(n)枚举搞一下就好;

    【完整代码】

    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <set>
    #include <map>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <queue>
    #include <vector>
    #include <stack>
    #include <string>
    using namespace std;
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define mp make_pair
    #define pb push_back
    #define fi first
    #define se second
    
    typedef pair<int,int> pii;
    typedef pair<LL,LL> pll;
    
    void rel(LL &r)
    {
        r = 0;
        char t = getchar();
        while (!isdigit(t) && t!='-') t = getchar();
        LL sign = 1;
        if (t == '-')sign = -1;
        while (!isdigit(t)) t = getchar();
        while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
        r = r*sign;
    }
    
    void rei(int &r)
    {
        r = 0;
        char t = getchar();
        while (!isdigit(t)&&t!='-') t = getchar();
        int sign = 1;
        if (t == '-')sign = -1;
        while (!isdigit(t)) t = getchar();
        while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
        r = r*sign;
    }
    
    const int MAXN = 1e5+100;
    const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
    const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
    const double pi = acos(-1.0);
    
    int n,x;
    int a[MAXN];
    map <int,int> dic;
    
    int main()
    {
       // freopen("F:\rush.txt","r",stdin);
        scanf("%d%d",&n,&x);
        rep1(i,1,n)
            scanf("%d",&a[i]);
        LL ans = 0;
        rep1(i,1,n)
        {
            if (dic[a[i]^x])
                ans+=dic[a[i]^x];
            dic[a[i]]++;
        }
        cout << ans << endl;
        return 0;
    }
  • 相关阅读:
    scrollLeft、offsetLeft、clientLeft、clientHeight区分
    表格斜线
    td里的所有STYLE
    对输入框输入的数字进行格式控制,是很实用的效果
    MSComm控件使用详解
    如何用javascripr动态添加table?
    TeeChart的安装 delphi7
    DELPHI 字符串分割处理
    转正则表达式 简单
    求解:js函数在预编译期间的谜 简单
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626858.html
Copyright © 2020-2023  润新知