题意:求[a,b]区间内的数字中正序对的个数。

具体思路参考:

https://blog.csdn.net/weixin_43135318/article/details/88061396

https://www.cnblogs.com/asdfsag/p/11278519.html

在此基础上维护一下每个状态中大于每个数字的数字出现的次数即可。

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=;
ll bit[N],nbit,f[N][][],g[N][][][N],G[N][][],vis[N][][],ka,a,b,ka2;
void dfs(ll u,ll ze,ll lim) {
if(vis[u][ze][lim]==ka)return;
vis[u][ze][lim]=ka;
G[u][ze][lim]=;
for(ll i=; i<=; ++i)g[u][ze][lim][i]=;
if(u==) {f[u][ze][lim]=; return;}
f[u][ze][lim]=;
for(ll i=; i<=(lim?bit[u]:); ++i) {
ll v=u-,ze2=ze&&i==,lim2=lim&&i==bit[u];
dfs(v,ze2,lim2);
f[u][ze][lim]+=f[v][ze2][lim2];
for(ll j=; j<=; ++j)g[u][ze][lim][j]+=g[v][ze2][lim2][j];
G[u][ze][lim]+=G[v][ze2][lim2];
if(!ze2) {
for(ll j=; j<=i; ++j)g[u][ze][lim][j]+=f[v][ze2][lim2];
G[u][ze][lim]+=g[v][ze2][lim2][i+];
}
}
}
ll solve(ll x) {
++ka;
for(nbit=; x; x/=)bit[++nbit]=x%;
dfs(nbit,,);
return G[nbit][][];
}
int main() {
ll T;
for(scanf("%lld",&T); T--;) {
scanf("%lld%lld",&a,&b);
printf("Case %lld: %lld\n",++ka2,solve(b)-solve(a-));
}
}

Gym - 102040B Counting Inversion (数位dp)的更多相关文章

  1. 『The Counting Problem 数位dp』

    The Counting Problem Description 求 [L,R]内每个数码出现的次数. Input Format 若干行,一行两个正整数 L 和 R. 最后一行 L=R=0,表示输入结 ...

  2. Codeforces Gym 100418J Lucky tickets 数位DP

    Lucky ticketsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view ...

  3. UVA - 1640 The Counting Problem (数位dp)

    题意:统计l-r中每种数字出现的次数 很明显的数位dp问题,虽然有更简洁的做法但某人已经习惯了数位dp的风格所以还是选择扬长避短吧(说白了就是菜啊) 从高位向低位走,设状态$(u,lim,ze)$表示 ...

  4. POJ2282:The Counting Problem(数位DP)

    Description Given two integers a and b, we write the numbers between a and b, inclusive, in a list. ...

  5. Codeforces Gym 100231L Intervals 数位DP

    Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description Start with an integer, N0, ...

  6. 数位DP GYM 100827 E Hill Number

    题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...

  7. Codeforces Gym 100286F Problem F. Fibonacci System 数位DP

    Problem F. Fibonacci SystemTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudg ...

  8. 【Dream Counting, 2006 Dec-数数的梦】数位dp

    题意:给定两个数,问区间[A,B]中0~9分别出现了多少次.A,B<=10^18 题解:应该是最裸的数位dp吧..一开始没有记忆化tle了TAT 我们可以求出区间[0,B]的,再减去区间[0,A ...

  9. 【数位dp】【二分】Gym - 101411H - Hotel in Ves Lagos

    数位dp预处理之后,可以容易得到f(x),代表小于等于x的数中,有多少个不含13的.然后就能二分答案啦. #include<cstdio> #include<iostream> ...

随机推荐

  1. 支付宝API

    1. 业务场景描述:在我们的爱旅行项目中,用户只有报名并且付款之后才能算作参加旅行团成功,因此必须提供快速便捷的支付功能:这里,我们选择了阿里的支付宝api来实现快捷支付,基于此,我们向蚂蚁金服发起申 ...

  2. OpenStack组件——Nova计算资源管理

    1.nova介绍 Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源.OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是通过 Nova 来实现的. ...

  3. 【机器学习】Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting

    Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting 这些术语,我经常搞混淆, ...

  4. C++中map和unordered_map的用法

    1. 简介 map和unordered_map都是c++中可以充当字典(key-value)来用的数据类型,但是其基本实现是不一样的. 2. map 对于map的底层原理,是通过红黑树(一种非严格意义 ...

  5. mysql——创建表、修改表、删除表(概念详细讲解)

    一.创建一个数据表 create table 表名 ( 列名1 数据类型1 [完整性约束条件], 列名2 数据类型2 [完整性约束条件], 列名3 数据类型3 [完整性约束条件], 列名4 数据类型4 ...

  6. JAVA实验三及总结

    JAVA第五周作业 Java实验报告三 第一题 1.已知字符串:"this is a test of java".按要求执行以下操作:(要求源代码.结果截图.) (1).统计该字符 ...

  7. PTA(Advanced Level)1011.World Cup Betting

    With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...

  8. PTA(Basic Level)1087.有多少不同的值

    当自然数 n 依次取 1.2.3.--.N 时,算式 ⌊n/2⌋+⌊n/3⌋+⌊n/5⌋ 有多少个不同的值?(注:⌊x⌋ 为取整函数,表示不超过 x 的最大自然数,即 x 的整数部分.) 输入格式: ...

  9. Java小知识-----Map 按Key排序和按Value排序

    Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value). 1.按键排序 jdk内置的java.util包下的Tr ...

  10. bochs 2.6.8 常用命令集合

    b addr 在物理地址处设置断点 addr为物理内存地址,不加段基址 lb 在线性地址处设置断点  addr为线性物理地址,不加基址 vb 在虚拟地址上设置断点 addr为段基址:偏移地址, cs段 ...