zoukankan      html  css  js  c++  java
  • 【vijos】【位运算】Miku_Nobody

    描述

    众所周知的(什么?你不知道?去百度一下),Nobody的团舞里有一个经典动作(那是相当的经典,经典了好几年),而这个动作是对称做两遍的.葱歌很喜欢这个动作(Mikuer们不要BS我…),她很想多做这个动作.
    但是邪恶的F,为了少看这无语的动作,给了葱歌两排非负整数.一排A数,一排B数.A数有n个,B数有m个.如果一个A数和一个B数的二进制表示法中,每一位都不一样的话(不足的数高位补0),则A和B能够组成一个”对称音”.每个数只能属于一个”对称音”.葱歌想要最多的对称音,让她可以尽量多跳那个动作.

    格式

    输入格式

    输入共3行.
    第1行两个正整数n,m,表示A数n个,B数m个.
    第2行n个非负整数,表示n个A数.
    第3行m个非负整数,表示m个B数.

    输出格式

    一行一个正整数,表示最多能得到的”对称音”个数.如果一个对称音都得不到,输出”I want nobody nobody but you”.

    代码

    关键在位运算… 剩下的就是匈牙利算法模板。

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #define INF 0x3f
    #define maxn 400
    using namespace std;
    
    int n,m,a[maxn],b[maxn],ans=0;
    bool w[maxn][maxn],vis[maxn];
    int match[maxn];
    
    bool judge(long long x)
    {
        x++;
        for(long long i=1;i<=x;i=(i<<1)) if(i==x) return 1;
        return 0;
    }
    
    bool find(int x){
        for(int i=1;i<=m;i++){
            if(w[x][i]&&!vis[i]){
                vis[i]=true;
                if(match[i]==-1||find(match[i])){
                    match[i]=x;
                    return true;
                }
            }
        }
        return false;
    } 
    
    int main(){
        freopen("in.txt","r",stdin);
        memset(w,0,sizeof(w));
        memset(match,-1,sizeof(match));
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        for(int i=1;i<=m;i++) scanf("%d",&b[i]);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                if (judge(a[i]+b[j])) w[i][j]=true;
        for(int i=1;i<=n;i++){
            memset(vis,0,sizeof(vis));
            if(find(i)) ans++;
        }
        if(ans!=0) printf("%d",ans);
        else printf("I want nobody nobody but you");
        return 0;
    }
  • 相关阅读:
    AWK
    ftp自动上传下载文件脚本
    tostring格式化输出
    C#时间处理--DateTime和TimeSpan
    C#正则表达式语法规则详解
    C#常用的正则表达式
    C#字符串截取
    FTP操作
    [BZOJ2947]促销(Splay)
    [BZOJ1208]宠物收养所(Splay)
  • 原文地址:https://www.cnblogs.com/leotan0321/p/6081394.html
Copyright © 2011-2022 走看看