Gym - 102040B Counting Inversion (数位dp)
题意:求[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)的更多相关文章
- 『The Counting Problem 数位dp』
The Counting Problem Description 求 [L,R]内每个数码出现的次数. Input Format 若干行,一行两个正整数 L 和 R. 最后一行 L=R=0,表示输入结 ...
- Codeforces Gym 100418J Lucky tickets 数位DP
Lucky ticketsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view ...
- UVA - 1640 The Counting Problem (数位dp)
题意:统计l-r中每种数字出现的次数 很明显的数位dp问题,虽然有更简洁的做法但某人已经习惯了数位dp的风格所以还是选择扬长避短吧(说白了就是菜啊) 从高位向低位走,设状态$(u,lim,ze)$表示 ...
- POJ2282:The Counting Problem(数位DP)
Description Given two integers a and b, we write the numbers between a and b, inclusive, in a list. ...
- Codeforces Gym 100231L Intervals 数位DP
Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description Start with an integer, N0, ...
- 数位DP GYM 100827 E Hill Number
题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...
- 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 ...
- 【Dream Counting, 2006 Dec-数数的梦】数位dp
题意:给定两个数,问区间[A,B]中0~9分别出现了多少次.A,B<=10^18 题解:应该是最裸的数位dp吧..一开始没有记忆化tle了TAT 我们可以求出区间[0,B]的,再减去区间[0,A ...
- 【数位dp】【二分】Gym - 101411H - Hotel in Ves Lagos
数位dp预处理之后,可以容易得到f(x),代表小于等于x的数中,有多少个不含13的.然后就能二分答案啦. #include<cstdio> #include<iostream> ...
随机推荐
- beego 如何自定error
beego通过Redirect方法来进行跳转: 1 2 3 func (this *AddController) Get() { this.Redirect("/", 30 ...
- webhooks动态更新配置
config server 项目中加入 monitor依赖 <dependency> <groupId>org.springframework.cloud</groupI ...
- Win10无线网络配置VMware的nat网络
1.在windows上用运行cmd,用ipconfig /all查看可用网络的dns服务器 2.配置VMnet8,其dns与本地的dns服务器相同 3.打开VMware Workstation 的编辑 ...
- iscsi脚本
服务端 #!/bin/bash #测试主机是否可以联网 echo -e "\033[31m即将测试主机是否可以联网\033[0m" ping -c 4 www.baidu.com ...
- Leetcode之动态规划(DP)专题-413. 等差数列划分(Arithmetic Slices)
Leetcode之动态规划(DP)专题-413. 等差数列划分(Arithmetic Slices) 如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列. 例如,以下数列为 ...
- ns2的第一个tcl脚本
set ns [new Simulator] set tracef [open example1.tr w]$ns trace-all $tracefset namtf [open example1. ...
- 关于绕过cookie 同源策略,和同时向前台返回图片和脚本的解决方案
绕过cookie的同源策略 向前端写入脚本时使用domain来绕过同源策略. 比如 domain= baidu.com .次脚本生成的cookie可以在 *.baidu.com中使用 /// < ...
- 单例模式(一)static、final和单例模式
static 那天我朋友问了我个问题,static和单例模式有什么区别,所以我觉得static可以讲一下 他的问题是,把对象弄成static是不是就不变了 显然,这是还没弄清楚引用和对象的区别 其实存 ...
- Elasticsearch-数组和多字段
ES-数组和多字段 当需要在同一个字段中需要拥有多个值时,就会用到数组. 数组 如果要索引拥有多个值的字段,将这些值放入方括号中即可.在music索引下的album类型中,添加songs字段,存储专辑 ...
- Intel Driver and Support Assistant 安装失败
Intel Driver and Support Assistant 以下简称 Intel DSA. Intel DSA 依赖 Microsoft Visual C++ 2015-2019 Redis ...