zoukankan      html  css  js  c++  java
  • 【搜索+思维】Distinctive Character

    题目描述

    Tira would like to join a multiplayer game with n other players. Each player has a character with some features. There are a total of k features, and each character has some subset of them. 
    The similarity between two characters A and B is calculated as follows: for each feature f, if both A and B have feature f or if none of them have feature f, the similarity increases by one.
    Tira does not have a character yet. She would like to create a new, very original character so that the maximum similarity between Tira’s character and any other character is as low as possible.
    Given the characters of the other players, your task is to create a character for Tira that fulfils the above requirement. If there are many possible characters, you can choose any of them.

    输入

    The first line of input contains two integers n and k, where 1 ≤ n ≤ 105 is the number of players (excluding Tira) and 1 ≤ k ≤ 20 is the number of features. 
    Then follow n lines describing the existing characters. Each of these n lines contains a string of k digits which are either 0 or 1. A 1 in position j means the character has the j’th feature, and a 0 means that it does not have the j’th feature.

    输出

    Output a single line describing the features of Tira’s character in the same format as in the input.
    If there are multiple possible characters with the same smallest maximum similarity, any one of them will be accepted. 

    样例输入

    3 5
    01001
    11100
    10111
    

    样例输出

    00010

    思路:

      首先对于一个串(假设10110),对于它能走到的串有5个分别是,00110,11110,10010,10100,10111,也就是只有一位与原串不一样的串。然后我们对于所有的源串,我们bfs,找到(1<<20)个串中,距离这些源串最远的串,就是匹配数目最大值最小的串。

    代码如下:

     1 #include <iostream>
     2 #include <bits/stdc++.h>
     3 using namespace std;
     4 const int maxn = (1<<20) ;
     5 queue<int> q;
     6 int d[maxn];
     7 string str;
     8 inline int read()                                //读入优化
     9 {
    10     int x=0,f=1;
    11     char c=getchar();
    12     while (!isdigit(c))
    13         f=c=='-'?-1:1,c=getchar();
    14     while (isdigit(c))
    15         x=(x<<1)+(x<<3)+(c^48),c=getchar();
    16     return x*f;
    17 }
    18 int n,k,maxx,als;
    19 void solve(){
    20     while(!q.empty())
    21     {
    22         int now=q.front();
    23         q.pop();
    24         for(int i=0;i<k;i++)
    25         {
    26             int nxt=now^(1<<i);
    27             if(d[nxt]!=-1)
    28                 continue;
    29             q.push(nxt);
    30             d[nxt]=d[now]+1;
    31             if(d[nxt]>maxx)
    32             {
    33                 maxx=d[nxt];
    34                 als=nxt;
    35             }
    36         }
    37     }
    38 }
    39 void output()
    40 {
    41     int a[20];
    42     for(int i=0;i<k;i++)
    43     {
    44         a[i]=als%2;
    45         als/=2;
    46     }
    47     for(int i=0;i<k;i++)
    48     {
    49         printf("%d",a[i]);
    50     }
    51     cout << endl;
    52 }
    53 int main()
    54 {
    55     n=read(),k=read();
    56     memset(d,-1,sizeof(d));
    57     for(int i=1;i<=n;i++)
    58     {
    59         cin>>str;
    60         int num=0;
    61         for(int i=0;i<k;i++)
    62         {
    63             if(str[i]=='1'){
    64                 num|=(1<<i);
    65             }
    66         }
    67         q.push(num);
    68         d[num]=0;
    69     }
    70     maxx=-1;
    71     solve();
    72     output();
    73     //cout << "Hello world!" << endl;
    74     return 0;
    75 }
    View Code
     
  • 相关阅读:
    QT::QString 很全的使用
    QString与TCHAR/wchar_t/LPWSTR之间的类型转换
    Django day24 cbv和APIView的源码分析 和 resful的规范
    Django day17 博客项目(一)
    Django day16 Auth组件
    Git 和 Redis 的基本认识
    Django day15 (二) csrf的 跨站请求伪造 与 局部禁用 , 局部使用
    Django day15 (一) cbv装饰器 , 中间件
    Django day14(二) Session
    Django基础必备三件套: HttpResponse render redirect
  • 原文地址:https://www.cnblogs.com/SoulSecret/p/9601531.html
Copyright © 2011-2022 走看看