P1831 杠杆数

题目描述

如果把一个数的某一位当成支点,且左边的数字到这个点的力矩和等于右边的数字到这个点的力矩和,那么这个数就可以被叫成杠杆数。

比如4139就是杠杆数,把3当成支点,我们有这样的等式:4 2 + 1 1 = 9 * 1。

给定区间[x,y],求出在[x,y]中有几个杠杆数。

输入输出格式

输入格式:

两个数,表示x,y。

输出格式:

一个输出,表示区间[x,y]中杠杆数的个数。

输入输出样例

输入样例#1:

7604 24324
输出样例#1:

897

说明

对于40%的数据,x<=y<=x+100000

对于100%的数据,1<=x<=y<=10^18

#include<iostream>
#include<cstdio>
using namespace std;
long long l,r,ans;
int a[];
bool check(long long now){
int len=;
while(now){
a[++len]=now%;
now/=;
}
int L=,R=;
for(int i=;i<=len;i++){//枚举支点
L=;R=;
for(int j=;j<i;j++)L+=(i-j)*a[j];
for(int j=i+;j<=len;j++)R+=(j-i)*a[j];
if(L==R)return ;
}
return ;
}
int main(){
scanf("%lld%lld",&l,&r);
for(long long i=l;i<=r;i++){
if(check(i))ans++;
}
cout<<ans;
}

40分 暴力(枚举每个数再枚举支点)

/*
数位dp,写的记忆化搜索
应该算数位dp中的简单题吧,套路都在
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long a,b,dp[][][];
int bit[],len;
long long dfs(int pos,int central,int pre,int limit){
if(pos<=)return pre==;
if(pre<)return ;
if(!limit&&dp[pos][central][pre]!=-)return dp[pos][central][pre];
int end=limit?bit[pos]:;
long long ans=;
for(int i=;i<=end;i++){
ans+=dfs(pos-,central,pre+i*(pos-central),limit&&i==end);
}
if(!limit)dp[pos][central][pre]=ans;
return ans;
}
long long solve(long long x){
len=;
while(x){
bit[++len]=x%;
x/=;
}
long long ans=;
for(int i=;i<=len;i++)ans+=dfs(len,i,,);
return ans-len+;
}
int main(){
memset(dp,-,sizeof(dp));
scanf("%lld%lld",&a,&b);
printf("%lld",solve(b)-solve(a-));
}

100分 数位dp

洛谷P1831 杠杆数的更多相关文章

  1. P1831 杠杆数

    P1831 杠杆数 题目描述 如果把一个数的某一位当成支点,且左边的数字到这个点的力矩和等于右边的数字到这个点的力矩和,那么这个数就可以被叫成杠杆数. 比如4139就是杠杆数,把3当成支点,我们有这样 ...

  2. 洛谷P1102 A-B数对

    洛谷P1102 A-B数对 https://www.luogu.org/problem/show?pid=1102 题目描述 出题是一件痛苦的事情! 题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A ...

  3. 洛谷P1288 取数游戏II(博弈)

    洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...

  4. 洛谷 P1392 取数

    题面 在做这道题前,先要会他的弱化版(实际一模一样,只是愚蠢的洛谷评测级别差了一档(睿智如姬无夜)) ----------------------------------弱化版------------ ...

  5. 洛谷——P2421 A-B数对(增强版)

    题目背景 woshiren在洛谷刷题,感觉第一题:求两数的和(A+B Problem)太无聊了,于是增加了一题:A-B Problem,难倒了一群小朋友,哈哈. 题目描述 给出N 个从小到大排好序的整 ...

  6. 洛谷 P5206 - [WC2019]数树(集合反演+NTT)

    洛谷题面传送门 神仙多项式+组合数学题,不过还是被我自己想出来了( 首先对于两棵树 \(E_1,E_2\) 而言,为它们填上 \(1\sim y\) 使其合法的方案数显然是 \(y\) 的 \(E_1 ...

  7. 【题解】洛谷P3166 [CQOI2014] 数三角形(组合+枚举)

    洛谷P3166:https://www.luogu.org/problemnew/show/P3166 思路 用组合数求出所有的3个点组合(包含不合法的) 把横竖的3个点共线的去掉 把斜的3个点共线的 ...

  8. P1831 杠杆数(数位Dp)

    题目描述 如果把一个数的某一位当成支点,且左边的数字到这个点的力矩和等于右边的数字到这个点的力矩和,那么这个数就可以被叫成杠杆数. 比如$4139$就是杠杆数,把3当成支点,我们有这样的等式:$4 \ ...

  9. 洛谷P1288 取数游戏II[博弈论]

    题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流 ...

随机推荐

  1. Android LinearLayout线性布局

    LinearLayout是线性布局控件:要么横向排布,要么竖向排布 决定性属性:必须有的! android:orientation:vertical (垂直方向) .horizontal(水平方向) ...

  2. myeclipse破解补丁激活失败方法

    查看本博客前,请先参考博客:http://blog.csdn.net/miss_kun/article/details/51819048 有时候,激活的时候不成功,比如我的是myeclipse2014 ...

  3. 学习使用ExpressJS 4.0中的新Router

    概述 ExpressJS 4.0中提出了新的路由Router.Router好比是一个"迷你版"的express应用,它没有引入views或者settings,但是提供了路由应有的A ...

  4. GDB打印内存命令

    用gdb查看内存 格式 x /nfu 参数说明 x是 examine 的缩写 n表示要显示的内存单元的个数 f表示显示方式, 可取如下值 x 按十六进制格式显示变量 d 按十进制格式显示变量 u 按十 ...

  5. 从mediaserver入手快速理解binder机制(最简单理解binder)【转】

    本文转载自;https://blog.csdn.net/u010164190/article/details/53015194 Android的binder机制提供一种进程间通信的方法,使一个进程可以 ...

  6. ping: sendto: Network is unreachable【转】

    本文转载自:http://blog.sina.com.cn/s/blog_640531380102wmzb.html 在我的板子上ping路由上的IP的时候可以ping通,但是ping外网的IP的时候 ...

  7. LightOJ - 1265 Island of Survival —— 概率

    题目链接:https://vjudge.net/problem/LightOJ-1265 1265 - Island of Survival    PDF (English) Statistics F ...

  8. access 驱动在win64位出现问题

    如果是调试的话,将应用程序池的 启动win32应用程序池 为 true

  9. JAVA-三大语句(选择语句、条件语句、循环语句)

    跳出指定的for循环体,和goto很像 1 K:for(int i=0;i<3;i++){//给这个for循环体取一个名字为K 2 for(int j=0;j<3;j++){ 3 if(j ...

  10. 最近采集写的一个超简单实用的HTML解析类

    1. [文件] HtmlDom.php <?php$oldSetting = libxml_use_internal_errors( true ); libxml_clear_errors(); ...