首页 > 其他分享 >Infinite Set (CF2D) (二进制+dp处理)

Infinite Set (CF2D) (二进制+dp处理)

时间:2022-11-21 11:47:46浏览次数:42  
标签:00 Set int pp long ri Infinite CF2D dp

 

 思路:

  • 给出了, 2^p, 然后2x+1, 4x, 发现和二有关
  • 进一步, 2x+1 是在 后面加一位 1, 4x, 是在后面+ 00; 
  • 因此直接dp处理
  • 对于本身的a[i], 看有没有数能够更新他即可. -> 有1去1, 有00 去00, 即可
#include <bits/stdc++.h>
using namespace std;
#define ri register int 
#define M 2000005

int n,m;
int p[M];
map<int,int> mp;
vector<int> pp[50];
long long dp[M];
int mod = 1e9+7;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    
    cin>>n>>m;
    for(ri i=1;i<=n;i++)
    {
        cin>>p[i];
    }
    for(ri i=1;i<=n;i++)
    {
        for(ri j=1;j<=34;j++)
        {
            long long tmp=1;
            if((tmp<<(j-1))>p[i])
            {
                pp[j-1].push_back(p[i]);    
            //    cout<<j-1<<" "<<p[i]<<"\n";
                break;
            }
        }
    }
    for(ri i=1;i<=m;i++)
    {
        if(i<=32)
        for(ri j=0;j<pp[i].size();j++)
        {
            int a=pp[i][j];
            int flag=1;
            while(a)
            {
                if(mp[a])
                {
                    flag=0;break;
                }
                if(a&1) a>>=1;
                else
                {
                    if((a/2)&1) break;
                    else a>>=2;
                }
            }
            if(flag) dp[i]++;
            mp[pp[i][j]]=1;
        }

        if(i-2>=0) dp[i]=(dp[i]+dp[i-2])%mod;
        if(i-1>=0) dp[i]=(dp[i]+dp[i-1])%mod;
    }
    long long ans=0;
    for(ri i=1;i<=m;i++)
    {
        ans=(ans+dp[i])%mod;
    //    cout<<dp[i]<<" ";
    }
    cout<<ans;
    return 0;

}
View Code

 

标签:00,Set,int,pp,long,ri,Infinite,CF2D,dp
From: https://www.cnblogs.com/Lamboofhome/p/16910886.html

相关文章

  • Solution Set -「LGR-126」洛咕咕的 NOIP 模拟赛
      机房在三楼,不在五楼.  三楼确实有阶梯教室.  三楼向外望是一楼大厅屋顶所以看上去不高.  十一点前必须离开科技楼是因为爱因斯坦要锁大门.  我不会被自......
  • 读懂maven的pom文件和seting文件
    <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache......
  • Miniconda & vs code _ How to Set up Python and Visual Studio Code IDE for Dat
    原文:HowtoSetupPythonandVisualStudioCodeIDEforDataScience-OneZeroBlog SettingupPythonandrunningitsmoothlyonyourPCisessentialford......
  • Vue3组件Props属性名不能与Setup()中变量名不可重复
    npmrunlint,显示错误点:30:9   error Gettingavaluefromthe`props`inrootscopeof`setup()`willcausethevaluetolosereactivity vue/no-setup-pr......
  • WSL linux reset password
    Kali: cd C:\Users\user\AppData\Local\Microsoft\WindowsAppspowershell.exekaliconfig--default-userrootpasswdbobexitkaliconfig--default-userbobR......
  • ES6之Set
    SetES6提供了新的数据结构Set(集合)。它类似于数组,但成员的值都是唯一的,集合实现了iterator接口,所以可以使用『扩展运算符』和『for…of…』进行遍历,集合的属性和方法:......
  • Redis学习(六)之redis中的数据类型之SortedSet类型
      1、sortedset中每个元素有一个浮点值。 2、浮点值越大的,元素排序就大,浮点值相同,则按元素的字符串值比较。 3、元素必须唯一。  1、ZADDkey[NX|XX][GT......
  • Git reset 的hard、soft、mixed参数对比
    目录分区概念1.--soft参数2.--mixed参数3.--hard参数分区概念先要清楚在本地,git会分三个区:工作区、暂存区、本地库。当使用去做版本移动的时候,那么在使用【--hard】......
  • Pod控制器详解(ReplicaSet)
    Pod控制器详解Pod控制器介绍Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类:-自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就......
  • git reset回退到指定commitid
    gitreflog能看到当前HEAD指向的commitlog,如果gitreset找不到文件了,尝试用这个命令,然后reset到想要回退的那个版本。一般来说,要回退版本,用--mix选项回退到到前一个版本,......