Codeforces 164 E Compatible Numbers

来源:互联网 发布:淘宝女装6皇冠 编辑:程序博客网 时间:2024/05/25 01:35

题目链接~~>

做题感悟:确实是好题,做拉的比赛的时候想了很久,想到枚举变幻某一位的 0 为 1 ,但是每个数都这样枚举岂不超时的节奏,当时没想到其实从大到小枚举一次就 ok 了。

解题思路:

               本题要求两个数  a & b = 0 , 如果 a  =  10010 , b 至少(指在 a 中的为 1 的位必须为 0 )是 01101 ,还可以是 00101 ,00001 ,00000。就相当于你去买东西一样,先提出你的要求(必须满足),至于其他方面都无所谓。这样我们可以枚举 b 中的 1 ,让其变为 0 ,那么,怎样枚举呢  ? 一个一个的枚举是不可以的,肯定超时,我们可以统一枚举一下,就跟状态压缩更新状态一样,相当于递推,用动态规划的思想去优化它,每个数最多只变化 0 的个数,然后再用变化了的数去变化。

代码:

#include<iostream>#include<sstream>#include<map>#include<cmath>#include<fstream>#include<queue>#include<vector>#include<sstream>#include<cstring>#include<cstdio>#include<stack>#include<bitset>#include<ctime>#include<string>#include<cctype>#include<iomanip>#include<algorithm>using namespace std  ;#define INT __int64#define L(x)  (x * 2)#define R(x)  (x * 2 + 1)const int INF = 0x3f3f3f3f ;const double esp = 0.0000000001 ;  const double PI = acos(-1.0) ;const INT mod = 1e9 + 7 ;const int MY = 15 ;const int MX = (1<<22) + 5 ;int n ;int dp[MX] ,g[MX] ;int main(){    //freopen("input.txt" ,"r" ,stdin) ;    while(~scanf("%d" ,&n))    {        int S = (1<<22) - 1 ;        memset(dp ,0 ,sizeof(dp)) ;        for(int i = 0 ;i < n ; ++i)        {            scanf("%d" ,&g[i]) ;            dp[g[i]^S] = g[i] ;  //  g[I] 需要的另一半        }        for(int i = S ; i >= 0 ; --i)  // 枚举各种状态        {            if(!dp[i])  // 如果没有存值            {                for(int j = 0 ;j < 22 ; ++j)  // 给其添加 1 让其变成有值                   if(dp[i|(1<<j)])                       dp[i] = dp[i|(1<<j)] ;            }        }        for(int i = 0 ;i < n ; ++i)        {            if(i)  cout<<" " ;            if(dp[g[i]])   cout<<dp[g[i]] ;            else           cout<<"-1" ;        }        cout<<endl ;    }    return 0 ;}

    

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 12306手机邮箱都换了怎么办 网易手机邮箱手机换了怎么办 崩坏3号被盗了怎么办 qq账号被永久冻结了怎么办 淘宝账号被永久冻结了怎么办 qq账号被永久冻结怎么办 多多理财账号冻结了怎么办 苹果id安全问题忘记了怎么办 网易邮箱帐号忘了怎么办 网易邮箱密码忘记了怎么办 网易邮箱密码忘了怎么办 网易邮箱忘记邮箱账号怎么办 崩坏3三无号被盗怎么办 qq邮箱给58占用怎么办 支付宝邮箱被占用怎么办 苹果手机下载不了qq怎么办 附件预览时发生错误怎么办 手机下载的压缩包打不开怎么办 邮箱提示中转站剩余容量不足怎么办 手机邮箱密码忘记了怎么办 垃圾邮件被系统删除了怎么办 邮箱里的邮件下载不了怎么办 qq邮箱下载不了文件怎么办 苹果手机忘记邮箱密码怎么办 oppo手机安装包损坏怎么办 手机安装包损坏无法安装怎么办 手机qq安装包损坏了怎么办 安装包损坏无法安装怎么办 方舟生存进化安装包损坏怎么办 如果安装包坏了怎么办 酷狗下载音乐收费怎么办 酷狗下载歌曲收费怎么办 酷狗音乐下载歌曲要钱怎么办 酷狗音乐下载要钱怎么办 手机酷狗音乐下载收费怎么办 咪咕视频静音了怎么办 卡西欧自拍神器死机了怎么办 手机一自拍就死机怎么办 微信怎么黑屏了怎么办 宝宝睡袋买大了怎么办 社保中间断了一年怎么办