zoukankan      html  css  js  c++  java
  • Balanced Numbers数位dp

    三进制搞下, 0  表示没出现过,  第i位为1 表示 i出现了奇数次,  2表示i 出现了偶数次。

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <climits>
    #include <string>
    #include <iostream>
    #include <map>
    #include <cstdlib>
    #include <list>
    #include <set>
    #include <queue>
    #include <stack>
    #include<math.h>
    using namespace std;
    typedef long long LL;
    LL dp[20][101111];
    int up[11111];
    int judge(int x)
    {
        int ans=0; int a[10];
        memset(a,0,sizeof(a));
        while(x){
            a[ans++]=x%3;
            x/=3;
        }
        for(int i = 0 ;i< ans;i++){
            if(a[i]==1&&(i&1)) return 0 ;
            if(a[i]==2&&!(i&1)) return 0;
        }
        return 1;
    }
    int change(int x,int i)
    {
        int ans=0 ;int a[10];
        memset(a,0,sizeof(a));
        while(x){
            a[ans++]=x%3; x/=3;
        }
        if(a[i]==0) a[i]=1;
        else
        if(a[i]==1) a[i]=2;
        else
        if(a[i]==2) a[i]=1;
        int ans1=0;
        for(int i = 9;i>=0;i--)
            ans1=ans1*3+a[i];
        return ans1;
    }
    
    LL gao(int now,int gaojici,int first,int flag)
    {
        if(now<=0) return judge(gaojici);
        if(!flag&&~dp[now][gaojici]) return dp[now][gaojici];
        LL limit = flag? up[now]: 9,ret=0;
        for(LL i= 0;i<=limit;i++){
            LL kk=change(gaojici,i);
            ret+=gao(now-1,(first||i)?kk:0,first||i,flag&&limit==i);
        }
        return flag? ret: dp[now][gaojici]=ret;
    }
    LL solve(LL x)
    {
        int  len=0;
        while(x){
            up[++len]= x%10;
            x/=10;
        }
        return gao(len,0,0,1);
    }
    int main()
    {
        int Icase;LL  b;LL a;
        memset(dp,-1,sizeof(dp));
        scanf("%d",&Icase);
        while(Icase--){
            cin>>a>>b;
            cout<<solve(b)-solve(a-1)<<endl;
        }
        return 0;
    }
  • 相关阅读:
    day04作业
    一个简单的gridlayout栗子
    用户名、密码等15个常用的js正则表达式
    html 颜色
    心态好的人,一辈子都好
    怎么样好好的聊天呢
    一篇引用文章
    再见,发微信不回的人
    第一个不怎么正经的网页
    关于学科目标
  • 原文地址:https://www.cnblogs.com/yigexigua/p/3901673.html
Copyright © 2011-2022 走看看