USACO 2014 US Open Odometer /// 数位DP
题目大意:
给定区间 l r
求得区间中有多少个数 数的各个数位里出现最多次的数>=数的长度的一半 如2233 3334
枚举k在数中出现次数在一半以上 那么求出的所有方案数中应该减去 两个数各占一半的情况
- #include <bits/stdc++.h>
- using namespace std;
- #define LL long long
- #define INF 0x3f3f3f3f
- #define mem(i,j) memset(i,j,sizeof(i))
- #define inc(i,l,r) for(int i=l;i<=r;i++)
- #define dec(i,r,l) for(int i=r;i>=l;i--)
- #define gcd(i,j) __gcd(i,j);
- const int N=;
- const int mod=1e9+;
- const double eps=1e-;
- LL dp[N][N][][];
- // dp[i][j][b1][b2]
- // i为数的第i位 j作为枚举的k出现次数的相对计数器
- // b1=1当前位小于上界 =0则是等于上界
- // b2=1到当前位之前全是前导0 =0则不是前导0
- LL DP(char t[],int n,int k1,int k2) {
- mem(dp,);
- dp[][][][]=; // 初始设25 防止负数
- inc(i,,n-) inc(j,,N-)
- inc(b1,,) inc(b2,,) {
- LL cur=dp[i][j][b1][b2];
- inc(nxt,,) { // 枚举下一位
- if(k2!=-) { // 说明枚举的是2233这种被两个数各占一半的情况
- if(b2== || nxt!=) // 下一位不是前导0
- if(nxt!=k1 && nxt!=k2) continue; // 但又不是这两种数
- }
- if(b1== && nxt>t[i]-'') continue;
- // 当前位已经是上界 那么下一位不能超过上界
- bool nb2= b2&(nxt==); // 当前位是0b2为1 下一位为0nxt==0为1 则nb2为1
- int nj=j;
- if(nb2==) { // 下一位不是前导0
- if(nxt==k1) nj--;
- else nj++;
- } // 是k1就+ 不是就- 最后j=25说明k1刚好一半 如果j<25说明k1超过半数
- bool nb1= b1|(nxt<t[i]-''); // 当前位之前均为上界b1=0 下一位为上界nxt<t[i]-'0'=0 则nb1为0
- dp[i+][nj][nb1][nb2]+=cur;
- }
- }
- LL res=dp[n][][][]+dp[n][][][];
- if(k2==-) inc(j,,)
- res+=dp[n][j][][]+dp[n][j][][];
- return res;
- }
- LL ANS(char t[],int n) {
- LL res=;
- inc(k,,) res+=DP(t,n,k,-); // k出现次数超过一半 如2223
- inc(k1,,) inc(k2,k1+,) // k1 k2各占一半的 如2323
- res-=DP(t,n,k1,k2);
- return res;
- }
- int main()
- {
- LL ta,tb;
- while(~scanf("%lld%lld",&ta,&tb)) {
- ta--;
- char a[],b[];
- int lena=,lenb=;
- while(ta) a[lena++]=ta%+'', ta/=;
- while(tb) b[lenb++]=tb%+'', tb/=;
- reverse(a,a+lena); reverse(b,b+lenb);
- printf("%lld\n",ANS(b,lenb)-ANS(a,lena));
- }
- return ;
- }
USACO 2014 US Open Odometer /// 数位DP的更多相关文章
- USACO 2014 US Open Odometer /// 枚举
题目大意: 给定区间 l r 求区间包含多少个数 它们各个位的数只有一个不一样 注意 多个位但多个数为0单个数为x的情况 这种情况只有 x000 即把单个数放在首位才是正确的 同样注意 多个位但单个数 ...
- [Swust OJ 1097]--2014(数位dp)
题目链接:http://acm.swust.edu.cn/problem/1097/ Time limit(ms): 1000 Memory limit(kb): 32768 今年是2014年,所 ...
- bzoj 3598 [ Scoi 2014 ] 方伯伯的商场之旅 ——数位DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3598 数位DP...东看西看:http://www.cnblogs.com/Artanis/ ...
- USACO翻译:USACO 2014 US Open 三题
USACO 2014 US Open 一.题目概览 中文题目名称 牧场装饰 里程表 牛像展览 英文题目名称 decorate odometer fairphoto 可执行文件名 decorate od ...
- 浅谈数位DP
在了解数位dp之前,先来看一个问题: 例1.求a~b中不包含49的数的个数. 0 < a.b < 2*10^9 注意到n的数据范围非常大,暴力求解是不可能的,考虑dp,如果直接记录下数字, ...
- hdu----(5045)Contest(数位dp)
Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- 以前刷过的数位dp
TOJ1688: Round Numbers Description The cows, as you know, have no fingers or thumbs and thus are una ...
- POJ3252 Round Numbers —— 数位DP
题目链接:http://poj.org/problem?id=3252 Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Su ...
- poj3252 Round Numbers(数位dp)
题目传送门 Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16439 Accepted: 6 ...
随机推荐
- 【记录】微信emoji表情存入数据库
最近遇到一个问题,在微信授权获取用户信息的时候,由于微信昵称(nickName)是表情,无法存入数据库. 查其原因,原来是因为数据库的编码格式不正确,我的是utf-8 改成utf8mb4就可以了. 其 ...
- Sass函数-Miscellaneous函数(三元条件函数)
在这里把 Miscellaneous 函数称为三元条件函数,主要因为他和 JavaScript 中的三元判断非常的相似.他有两个值,当条件成立返回一种值,当条件不成立时返回另一种值: if($cond ...
- Vue-鼠标按键修饰符
left .right .middle 这些修饰符会限制处理函数仅响应特定的鼠标按钮. 如下例子 <div id="app"> <input type=" ...
- Mac brew 安装Postgres 开机自启动
以下所有命令在mac 终端执行 1.安装postgres brew install postgres 2.brew 安装的程序都可以在/usr/local/Cellar/下找到,去/usr/local ...
- Echarts和Highcharts学习笔记01——入门了解
Echarts是国内百度团队开发的(开源),基于Canvas,适合数据量较大的情况: Highcharts是国外的(商用需授权),基于SVG,方便自己定制,但能使用的图表类型有限: Echarts ...
- Dataphin的代码自动化能力如何助力商业决策
前言 随着大数据趋势的迅速增长,数据的重要性与日俱增,企业内看数据.用数据的诉求越来越强烈,其中最常见的就是各种经营报表数据:老板每日早晨9点准时需要看到企业核心的经营数据,以便进行企业战略及方向决策 ...
- Python基础教程(016)--Python2和Python3的介绍
前言 Python2和Python3的区别 内容 Python3是现在和未来的主要版本 Python3没有考虑向下兼容. 官方提供了一个Python过度版本Python2.6 Python2.6及支持 ...
- AGC002 F Leftmost Ball——DP
题目:https://atcoder.jp/contests/agc002/tasks/agc002_f 充要条件是前缀0的个数 >= 颜色种数. 设计 DP ,放一个颜色的时候就把所有该颜色的 ...
- 如何为网站启用HTTPS加密传输协议
前言 当今时代对上网的安全性要求比以前更高,chrome和firefox也都大力支持网站使用HTTPS,苹果也从2017年开始在iOS 10系统中强制app使用HTTPS来传输数据,微信小程序也是要求 ...
- linux6.5 RPM方式安装 mysql5.6
步骤一.检查下linux是不是已经安装了MySQL # rpm -qa|grep mysql mysql-libs-5.1.71-1.el6.x86_64 # rpm -e --nodeps mysq ...