cf 834 E. Ever-Hungry Krakozyabra
cf 834 E. Ever-Hungry Krakozyabra(爆搜+数位dp)
题意:
定义一种inedible tail为一个数把每一位数字按不降的顺序排列后,去掉前导0组成的序列
比如57040 组成的就是457  54组成就是45 45组成的也是45
问区间\([L,R]\)内有多少种inedible tail
题解: 直接数位dp做,需要存状态,太大处理不了。
这个问题等价于\(x0+x1+x2+...x9=18\)的非负整数解
组合数学 插空法 \(18+9个1,选9个插空,其余变1就是解,C(18+9,9) \approx 4*10^{6}\)
所以可以暴力枚举出所有方案,然后快速判断这种方案在\([L,R]\)内是否合法
用类似数位dp的思想,用上下界来枚举每一位能取的数字,到到达某一位时即不在上界也不在下界,说明后面的数字可以随便取,那么一定取得出这种方案
由于只有在上界或者下界的时候递归才会继续往下走,所以最多走18次,线性复杂度判断
#include<bits/stdc++.h>
#define LL long long
#define P pair<int,int>
#define ls(i) seg[i].lc
#define rs(i) seg[i].rc
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ls rt<<1
#define rs (rt<<1|1)
using namespace std;
int read(){
    int x = 0;
    char c = getchar();
    while(c < '0' || c > '9') c = getchar();
    while(c >= '0' && c <= '9') x = x * 10 + c - 48, c = getchar();
    return x;
}
int pos,ans;
int a[20],b[20];
int cnt[10];///数字为i的个数
bool is(int pos,bool Lbound,bool Rbound){
    if(pos == 0) return true;
    if(!Lbound && !Rbound) return true;///不是上下界,后面的数字可以任意取一定存在合法的情况
    int l = Lbound?a[pos]:0;
    int r = Rbound?b[pos]:9;
    if(l > r) return false;
    for(int i = l;i <= r;i++){///枚举每一位能取的数字
        if(cnt[i]){
            cnt[i]--;
            if(is(pos - 1,Lbound && i == l, Rbound && i == r)){
                cnt[i]++;
                return true;
            }
            cnt[i]++;
        }
    }
    return false;
}
void dfs(int cur,int total){
    if(cur == 9){
        cnt[cur] = total;
        ans += is(pos,1,1);
        return ;
    }
    for(int i = 0;i <= total;i++){
        cnt[cur] = i;
        dfs(cur + 1, total - i);
    }
}
int digit(int *d,LL x){
    int pos = 0;
    while(x){
        d[++pos] = x % 10;
        x /= 10;
    }
    return pos;
}
int main(){
    LL L,R;
    cin>>L>>R;
    pos = digit(a,L);
    pos = digit(b,R);
    ans = 0;
    dfs(0,pos);///暴力枚举所有的组合
    cout<<ans<<endl;
    return 0;
}
cf 834 E. Ever-Hungry Krakozyabra的更多相关文章
- 高斯分布与Gamma分布关系
		https://math.stackexchange.com/questions/1917647/proving-ex4-3%CF%834 
- CF 327B. Hungry Sequence
		B. Hungry Sequence time limit per test 1 second memory limit per test 256 megabytes input standard i ... 
- cf B. Hungry Sequence
		http://codeforces.com/contest/327/problem/B 这道题素数打表就行. #include <cstdio> #include <cstring& ... 
- ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'
		凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ... 
- cf之路,1,Codeforces Round #345 (Div. 2)
		cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ... 
- cf Round 613
		A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ... 
- ARC下OC对象和CF对象之间的桥接(bridge)
		在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ... 
- [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现
		1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ... 
- CF memsql Start[c]UP 2.0 A
		CF memsql Start[c]UP 2.0 A A. Golden System time limit per test 1 second memory limit per test 256 m ... 
随机推荐
- 【PE】手动给PE文件添加一段代码MessageBoxA
			源程序是这个样子: 思路: 1.通过LordPE工具拿到所需数据 2.OllyDebug通过BP MessageBoxA拿到MessageBoxA地址 3.UE十六进制编辑器定位代码节基址 4.在代码 ... 
- Struts2基础学习2
			Struts2基础学习2 项目结构,测试页面与实体类 <%@ page language="java" contentType="text/html; charse ... 
- C#+Winform开发窗体程序
			学习笔记 第一章:winform基础 一.概述 1.Windows Form(简称WinForm) 是微软.NET平台下用于开发"图形界面"应用程序的组件. 2.C/S架构 客户机 ... 
- 私有maven库发布及使用流程
			## 私有maven库发布流程 ### 环境配置 - idea环境下,如果使用内置maven,需要手动生成settings.xml,并关联. - 操作如下 - 生成settings.xml 右键pom ... 
- 原生Ajax发送请求
			ajax get&post 1.使用get发送请求,会有请求缓存 1)什么叫请求缓存,请求信息相同浏览器不会再向服务器发送请求,导致访问服务器失败. 2)解决:将随机数添加到请求路径后面参数 ... 
- 8-2 开发接口 (入参是json格式)
			1.开发入参事json格式的接口 import json import tools import flask from .check_session import check_session serv ... 
- Apache Maven(一):快速入门
			Maven 是什么? Maven 是一个项目管理和整合工具.Maven 为开发者提供了一套完整的构建生命周期框架.开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一 ... 
- TCP/IP协议之http和https协议
			一.TCP/IP协议 TCP/IP 是不同的通信协议的大集合. 1.TCP - 传输控制协议 TCP 用于从应用程序到网络的数据传输控制. TCP 负责在数据传送之前将它们分割为 IP 包,然后在它们 ... 
- vue 点击当前元素添加class 去掉兄弟的class
			<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ... 
- iOS常用控件-UIScrollView
			一. 常见属性 @property (nonatomic) CGPoint contentOffset; //记录UIScrollView滚动的位置 @pro ... 
