zoukankan      html  css  js  c++  java
  • CodeForces1420B

    题意

    给出(T)组数据,每组数据给出一个(n)(n)个数,

    要求 找出 ((i,j)) 有几对,有两个要求:

    • (i < j)

    • (a_{i} & a_{j} geq a_{i} oplus a_{j}) 。(与 和 异或)

    思路

    for循环从2开始判断每个元素,判断条件是 if((a[i]&a[i-1])>=(a[i]^a[i-1])),

    先设两个变量cnt和ans,一个cnt表示最高位相同的元素有几个,一个ans表示输出的对数,

    如果满足这个判断条件,说明其位数相同,所以cnt++;当下一个元素仍然满足这个条件的话,就相当于a[i-2]、a[i-1]、a[i]的最高位位数相同,所以ans+=cnt。

    注意

    cnt和ans需要开long long,其他的不用。

    AC代码

    #include<iostream>
    #include<string.h>
    #include<algorithm>
    #include<stdio.h>
    #include<cmath>
    #include<list>
    #include<stdlib.h>
    #include<map>
    #include<stack>
    #include<stdio.h>
    #include<queue>
    using namespace std;
    typedef long long ll;
    #define sc(T) scanf("%d",&T)
    #define scc(x,y) scanf("%d %d",&x,&y)
    #define pr(T) printf("%d
    ",T)
    #define f(a,b,c) for (int a=b;a<c;a++)
    #define ff(a,b,c) for (int a=b;a>c;a--)
    #define inf 0x3f3f3f3f
    #define mem(a,b) memset(a,b,sizeof(a))
    #define eps 1e-9
    #define PI acos(-1)
    
    int a[100010];
    
    int main()
    {
        int T;
        sc(T);
        while(T--)
        {
            int n;
            cin>>n;
            for(int i=1; i<=n; i++)
                sc(a[i]);
            sort(a+1,a+n+1);
            ll cnt=0,ans=0;
            //  ai&aj ≥ ai⊕aj
            for(int i=2; i<=n; i++)
            {
                if((a[i]&a[i-1])>=(a[i]^a[i-1])) // 注意优先级加括号
                    cnt++,ans+=cnt;
                else
                    cnt=0;
            }
            cout<<ans<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    MVC模式-----struts2框架(2)
    MVC模式-----struts2框架
    html的<h>标签
    jsp脚本元素
    LeetCode "Paint House"
    LeetCode "Longest Substring with At Most Two Distinct Characters"
    LeetCode "Graph Valid Tree"
    LeetCode "Shortest Word Distance"
    LeetCode "Verify Preorder Sequence in Binary Search Tree"
    LeetCode "Binary Tree Upside Down"
  • 原文地址:https://www.cnblogs.com/OFSHK/p/13735963.html
Copyright © 2011-2022 走看看