zoukankan      html  css  js  c++  java
  • 【UVALive】2965 Jurassic Remains(中途相遇法)

    题目

    传送门:QWQ

    分析

    太喵了~~~~~

    还有中途相遇法这种东西的。

    嗯 以后可以优化一些暴力

    详情左转蓝书P58

    (但可能我OI生涯中都遇不到正解是这个的题把。。。。。。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=25;
    map<int,int> table;
    int bitcount(int x){return x==0?0:bitcount(x>>1)+(x&1);}
    int main(){
        int n,A[maxn];
        char s[100];
        while(scanf("%d",&n)==1 && n){
            for(int i=0;i<n;i++){
                scanf("%s",s); A[i]=0;
                for(int j=0;s[j]!='';j++) A[i]|=(1<<(s[j]-'A'));
            }
            table.clear();
            int n1=n>>1, n2=n-n1;
            for(int i=0;i<(1<<n1);i++){
                int x=0;
                for(int j=0;j<n1;j++) if(i&(1<<j)) x^=A[j];
                if(!table.count(x) || bitcount(table[x])<bitcount(i)) table[x]=i;
            }
            
            int ans=0;
            for(int i=0;i<(1<<n2);i++){
                int x=0;
                for(int j=0;j<n2;j++) if(i&(1<<j)) x^=A[j+n1];
                if(table.count(x) && bitcount(ans)<bitcount(i)+bitcount(table[x])) ans=(i<<n1)^table[x];
            }
            printf("%d
    ",bitcount(ans));
            for(int i=0;i<n;i++) if(ans&(1<<i)) printf("%d ",i+1);
            puts("");
        }
        return 0;
    }
  • 相关阅读:
    jquery02
    jquery01
    oracle04_plsql
    oracle03
    oracle02
    oracle01
    selenium
    爬取京东商品信息并保存到MongoDB
    python pymongo操作之增删改查
    MongoDB 数据库表删除
  • 原文地址:https://www.cnblogs.com/noblex/p/9226109.html
Copyright © 2011-2022 走看看