zoukankan      html  css  js  c++  java
  • 2017轻工业校赛 密室逃脱 异或运算 https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2133

    Description

    XOR在玩密室逃脱,在某一关中,桌上有一个一张纸,上面写着“请根据所给例子求解答案从而获得密码”,下面写了几个字符串“01 10 11”,而答案为“6”,聪明的XOR立马就知道了这是给出一些二进制数字S,求存在多少对有序二元组(i,j)使得S[i]^S[j]<S[i],现在还有T组数据,每组是n个长度为m的二进制数字,聪明的XOR立马开始动手求解答案。

    Input

    第一行一个整数T,表示数据组数。

    对于每组数据,首先读入两个整数n,m(n*m<=1000000),接下来为n行,每行为一个长度为m的01串,表示一个二进制数字

    Output

    对于每个数据,输出一个整数x,表示二元组数目

    Sample Input

    1 3 2 01 10 11

    Sample Output

     
    数组统计也用long long   不然就会错   鬼知道我经历了什么
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<queue>
    #include<map>
    #include<vector>
    #include<math.h>
    using namespace std;
    #define INF 0x3f3f3f3f
    #define LL long long
    #define N 1000009
    char str[N];
    LL w[N],ww[N];
    int main()
    {
        int T,n,m;
        scanf("%d",&T);
        while(T--)
        {
            memset(w,0,sizeof(w));
            memset(ww,0,sizeof(ww));
            scanf("%d%d",&n,&m);
            for(int i=0;i<n;i++)
            {
                scanf("%s",str);
                int t=0;
                for(int j=0;j<m;j++)
                {
                    if(str[j]=='1'&&!t)
                    {
                        w[j]++;
                        t=1;
                    }
                    if(str[j]=='1')
                        ww[j]++;
                }
            }
            LL sum=0;
            for(int i=0;i<m;i++)
                sum+=w[i]*ww[i];
            printf("%lld
    ",sum);
        }
        return 0;
    }
     
  • 相关阅读:
    绿色版 notepad++ 添加鼠标右键菜单
    Scala 安装与配置
    Scala 神奇的下划线 _
    Kafka 安装部署
    Pulsar 下一代消息平台
    Sqoop 安装部署
    Flume 常用配置项
    Android-selector
    android- 9patch
    有关内存的思考题
  • 原文地址:https://www.cnblogs.com/a719525932/p/6724856.html
Copyright © 2011-2022 走看看