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

具体思路参考:

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

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

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

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const ll N=;
  5. ll bit[N],nbit,f[N][][],g[N][][][N],G[N][][],vis[N][][],ka,a,b,ka2;
  6. void dfs(ll u,ll ze,ll lim) {
  7. if(vis[u][ze][lim]==ka)return;
  8. vis[u][ze][lim]=ka;
  9. G[u][ze][lim]=;
  10. for(ll i=; i<=; ++i)g[u][ze][lim][i]=;
  11. if(u==) {f[u][ze][lim]=; return;}
  12. f[u][ze][lim]=;
  13. for(ll i=; i<=(lim?bit[u]:); ++i) {
  14. ll v=u-,ze2=ze&&i==,lim2=lim&&i==bit[u];
  15. dfs(v,ze2,lim2);
  16. f[u][ze][lim]+=f[v][ze2][lim2];
  17. for(ll j=; j<=; ++j)g[u][ze][lim][j]+=g[v][ze2][lim2][j];
  18. G[u][ze][lim]+=G[v][ze2][lim2];
  19. if(!ze2) {
  20. for(ll j=; j<=i; ++j)g[u][ze][lim][j]+=f[v][ze2][lim2];
  21. G[u][ze][lim]+=g[v][ze2][lim2][i+];
  22. }
  23. }
  24. }
  25. ll solve(ll x) {
  26. ++ka;
  27. for(nbit=; x; x/=)bit[++nbit]=x%;
  28. dfs(nbit,,);
  29. return G[nbit][][];
  30. }
  31. int main() {
  32. ll T;
  33. for(scanf("%lld",&T); T--;) {
  34. scanf("%lld%lld",&a,&b);
  35. printf("Case %lld: %lld\n",++ka2,solve(b)-solve(a-));
  36. }
  37. }

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. app测试自动化操作方法之二

    3.进行APP的滑动操作 方法一:#获取窗口大小def get_size(): size=dr.get_window_size() return size print(get_size())#向上滑动 ...

  2. 【机器学习】Learning to Rank入门小结 + 漫谈

    Learning to Rank入门小结 + 漫谈 Learning to Rank入门小结 Table of Contents 1 前言 2 LTR流程 3 训练数据的获取4 特征抽取 3.1 人工 ...

  3. 我理解的CLH

    学而时习之,不亦说乎!                              --<论语> 原创,转载请附原文链接,谢谢. CLH 思路 保持时序的锁基本思路就是将等待获取锁的线程放入 ...

  4. 使用PowerShell 将用户添加至用户组

    执行环境:Windows Server 2012 R2 语法 net localgroup 用户组名称 用户名 /add eg. net localgroup administrators myboo ...

  5. 引用Nuget包Microsoft.EntityFrameworkCore.Tools.DotNet报错

    错误如下 解决方法 使用VS2017或更高版本在改项目右键,选择“编辑xxx.csproj”,并添加如下一句话,就可以成功引用改Nuget包 <PackageReference Include= ...

  6. jenkins pipline 和 jenkinsfile

    Jenkins Pipeline(或简称为 "Pipeline")是一套插件,将持续交付的实现和实施集成到 Jenkins 中.Jenkins Pipeline 提供了一套可扩展的 ...

  7. 最短meeting路线(树的直径)--牛客第四场(meeting)

    题意: 给你一棵树,树上有些点是有人的,问你选一个点,最短的(最远的那个人的距离)是多少. 思路: 其实就是树的直径,两遍dfs,dfs第二遍的时候遇到人就更新直径就行了,ans是/2,奇数的话+1. ...

  8. vs2019编译opencv

    序 微软家的宇宙第一ide:visual studio已经更新到了2019版,芒果也更新尝鲜了一遍,体验还不错,建议更新尝尝鲜.芒果顺便使用vs2019编译了一遍opencv,编译过程也非常顺利,以下 ...

  9. Fidder抓包设置

    1, 谷歌浏览器中:

  10. python __dict__ 跟 dir()的区别

    __dict__:要是对象的话返回的是一个对象自身的实例属性.不包括类的属性:要是类的__dict__则不包括父类的属性,只包含自身类属性[方法.类变量],不包括实例属性.正是这样.每个实例的实例属性 ...