luogu3107
相对较为模板化的代码 f[i][j][bo1][bo2]记录到第i位,数字num出现了x次(j初始为20,若当前数字不为num,j++;否则j--;最后只要记录j<=20的总和)bo1和bo2就很简单了,上界和前导零
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
using namespace std;
#define int long long
string l,r;
int f[][][][],kkk[];
inline int DP(int le,int num1,int num2)
{
int re=,i,bo1,bo2,j,k,bo,pp; memset(f,,sizeof f); f[][][][]=;
//bo1:上界 bo2:前导零
for(i=;i<le;i++)
{
for(j=;j<=;j++)
{
for(bo1=;bo1<;bo1++)
{
for(bo2=;bo2<;bo2++)
{
if(f[i][j][bo1][bo2]==)continue;
for(k=;k<=;k++)
{
if((num2!=-&&(k!=||!bo2)&&k!=num1&&k!=num2)||(bo1&&k>kkk[i]))continue; pp=j;
if(!bo2||k!=)
{
if(num2==-)
{
if(k==num1)pp--;else pp++;
}
else
{
if(k==num1)pp--;else if(k==num2)pp++;
}
}f[i+][pp][bo1&(k==kkk[i])][bo2&(k==)]+=f[i][j][bo1][bo2];
}
}
}
}
}
if(num2==-)
{
for(i=;i<=;i++)for(j=;j<;j++)re+=f[le][i][j][];
}else for(i=;i<;i++)re+=f[le][][i][];
return re;
}
inline int solve(string s)
{
int re=,i,j,le=s.size();
for(i=;i<le;i++) kkk[i]=s[i]-'';
for(i=;i<=;i++) re+=DP(le,i,-);
for(i=;i<;i++)
{
for(j=i+;j<=;j++)re-=DP(le,i,j);
}return re;
}
signed main()
{
int i; cin>>l>>r;
for(i=l.size()-;i>=;i--)
{
if(l[i]=='')l[i]='';else {l[i]--;break;}
}printf("%lld\n",solve(r)-solve(l));
}
luogu3107的更多相关文章
随机推荐
- 【Codeforces 912E】Prime Gift
Codeforces 912 E 题意:给\(n\leq16\)个素数\(p_1..p_n\),求第\(k\)个所有质因数都在\(n\)个数中的数. 思路:折半搜索...我原来胡搞毛搞怎么也搞不动\( ...
- 在Linux下,如何分析一个程序达到性能瓶颈的原因
0.在Linux下,如何分析一个程序达到性能瓶颈的原因,请分别从CPU.内存.IO.网络的角度判断是谁导致的瓶颈?注意现在的机器CPU是多核 1.用sar -n DEV 1 10 2.用iotop命令 ...
- ESP8266开发综合篇(LUA开发-视频教程总揽)
为了解决基础教程简单入门但不实用,项目方案非常实用但比较难的问题,开始推出8266开发综合篇 综合篇涉及到AT,LUA,SDK,LUA(sdk)开发,LUA和SDK开发会同步进行,后期再整理AT指令的 ...
- php中按值传递和按引用传递的一个问题
php中传递变量默认是按照值传递. 简单举个例子: <?php function testArray($arr){// &$arr $arr = array(1,2,3,); } $ar ...
- 使用第三方库(Senparc)完成小程序支付 - z
https://www.cnblogs.com/zmaiwxl/p/8931585.html
- WebApi 接口返回值不困惑:返回值类型详解。IHttpActionResult、void、HttpResponseMessage、自定义类型
首先声明,我还没有这么强大的功底,只是感觉博主写的很好,就做了一个复制,请别因为这个鄙视我,博主网址:http://www.cnblogs.com/landeanfen/p/5501487.html ...
- linux svn代码回滚命令
取消对代码的修改分为两种情况: 第一种情况:改动没有被提交(commit). 这种情况下,使用svn revert就能取消之前的修改. svn revert用法如下: # svn revert [-R ...
- GATT服务搜索流程(一)
GATT的规范阅读起来还是比较简答, 但是这样的规范在代码上是如何实现的呢?下面就分析一下bluedroid 协议栈关于GATT的代码流程. BLE的设备都是在SMP之后进行ATT的流程的交互.从代码 ...
- 自己动手写把”锁”---LockSupport深入浅出
本篇是<自己动手写把"锁">系列技术铺垫的最后一个知识点.本篇主要讲解LockSupport工具类,它用来实现线程的挂起和唤醒. LockSupport是Java6引入 ...
- js方法中拼接html时点击事件中拼接字符串参数
1,代码 var html = '<a href="#" onclick="tableDelete(\''+ row.labelid +'\')"> ...