51nod1042(0-x出现次数&分治)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1042
题意:中文题诶~
思路:这道题和前面的51nod1009好像,直接套用那个算法也是能ac的,不过我还是喜欢换个口味;
求a, b之间个数字出现的次数。可以由分治的思想,先求出他们在0~b出现的次数, 再求出在0~a-1出现的次数,前者减去后者即为答案;
然而如何求出0~x各个数字出现的次数我是看了一本书上的方法才会的,这里直接给出代码好了,随便带入一组数据也不难验证其正确性,所以也就不多说啦。。。
代码:
#include <bits/stdc++.h>
#define ll long long
#define MAXN 10
using namespace std; ll value=; //***value记录当前的权值
ll vis[MAXN]; //***vis[i]存储0到x中i出现的次数 void deal(ll n){
if(n<=){
return;
}
ll one=n%; //***one, ten分别表示当前n的个位和高位
n/=;
ll ten=n;
for(int i=; i<=one; i++){ //***累计当前个位出现的次数
vis[i]+=value;
}
while(ten){
vis[ten%]+=(one+)*value; //***累计当前高位出现的次数
ten/=;
}
for(int i=; i<; i++){ //***累计权值范围数出现的次数
vis[i]+=n*value; //***注意这里会累加到0开头的情况
}
vis[]-=value; //***将第一位是0的情况排除
value*=;
deal(n-);
} int main(void){
ll a, b;
cin >> a >> b;
if(a>b){
swap(a, b);
}
deal(b);
value=-;
deal(a-);
for(int i=; i<; i++){
cout << vis[i] << endl;
}
return ;
}
还是写一下套用1009ac的代码好了~
代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std; ll deal(ll n, ll key){
ll x=n, cnt=, ans=;
while(n){
if(!key){
ans-=cnt;
}
ll gg=n%;
ll num=x/(cnt*);
if(gg<key){
ans+=num*cnt;
}else if(gg==key){
ans+=num*cnt+x%cnt+;
}else{
ans+=(num+)*cnt;
}
cnt*=;
n/=;
}
return ans;
} int main(void){
ll a, b;
cin >> a >> b;
if(a>b){
swap(a, b);
}
for(ll i=; i<; i++){
cout << deal(b, i)-deal(a-, i) << endl;
}
return ;
}
51nod1042(0-x出现次数&分治)的更多相关文章
- js 返回一个数组里面0出现的次数
var num = new Array(10000).fill('').map((item,index) => (index + 1)). 在点号后面补充代码,让num是这个数组中0出现的次数, ...
- [LeetCode]1342. 将数字变成 0 的操作次数
给你一个非负整数 num ,请你返回将它变成 0 所需要的步数. 如果当前数字是偶数,你需要把它除以 2 :否则,减去 1 . 示例 1: 输入:num = 14 输出:6 解释: 步骤 1) 14 ...
- 基于Qt5.5.0的sql数据库、SDK_tts文本语音朗读的CET四六级单词背诵系统软件的编写V1.0
作者:小波 QQ:463431476 请关注我的博客园:http://www.cnblogs.com/xiaobo-Linux/ 我的第二款软件:CET四六级单词背诵软件.基于QT5.5.0.sql数 ...
- POJ 3286 How many 0's?(几多0?)
POJ 3286 How many 0's?(几多0?) Time Limit: 1000MS Memory Limit: 65536K [Description] [题目描述] A Benedi ...
- P163、面试题29:数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. 思 ...
- jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
需求: 抽奖代码最多可以抽奖5次,而且,每次只会中“2000元理财金”或者“谢谢参与”,其它的不会抽中(哈哈,果然都是套路). 效果如下: 一.页面结构: ? 1 2 3 4 5 6 7 8 9 10 ...
- ElasticSearch6.5.0 【Java客户端之REST Client】
说明 High Level Client 是基于 Low Level Client 的.官方文档如下: * https://www.elastic.co/guide/en/elasticsearch/ ...
- Unity3D-RayMarch-几何图元0
效果图: 将下面的shader代码对应的Material拖给一个面片,即可看到效果. shader代码: // Upgrade NOTE: replaced '_Object2World' with ...
- 使用python找出nginx访问日志中访问次数最多的10个ip排序生成网页
使用python找出nginx访问日志中访问次数最多的10个ip排序生成网页 方法1:linux下使用awk命令 # cat access1.log | awk '{print $1" &q ...
随机推荐
- Python—numpy.bincount()
1.它大致说bin的数量比x中的最大值大1,每个bin给出了它的索引值在x中出现的次数.下面,我举个例子让大家更好的理解一下: # 我们可以看到x中最大的数为7,因此bin的数量为8,那么它的索引值为 ...
- 【BZOJ 3238】差异 后缀自动机+树形DP
题意 给定字符串,令$s_i$表示第$i$位开始的后缀,求$\sum_{1\le i < j \le n} len(s_i)+len(s_j)-2\times lcp(s_i,s_j)$ 先考虑 ...
- bootstrap-自定义导航栏隐藏参数@screen-sm
导航菜单默认在屏幕小于768px的时候自动折叠,怎么自定义这个大小? 需要重新编译bootstrap 编译 CSS 和 JavaScript 文件 问题解决!
- 素数环:NYOJ--488--dfs||hdu-1016-Prime Ring Problem
/* Name: NYOJ--488--素数环 Author: shen_渊 Date: 15/04/17 15:30 Description: DFS,素数打个表,37以内就够用了 */ #incl ...
- 数据库连接池(connection pool)
1.JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: – 在主程序(如servlet.beans)中建立数据库连接. – 进行sql ...
- Gym - 100801D:Distribution in Metagonia (数学)
题意:给定一个N,让你把它拆成若干个只含素因子2和3的数之和,且两两之间没有倍数关系,比如10=4+6. 思路:即是2因子的幂递增,3因子的幂递减:或者反之. 对于当前N,我们拆分出的数为num=2^ ...
- ACM学习历程—HDU 5459 Jesus Is Here(递推)(2015沈阳网赛1010题)
Sample Input 9 5 6 7 8 113 1205 199312 199401 201314 Sample Output Case #1: 5 Case #2: 16 Case #3: 8 ...
- 【LeetCode】018 4Sum
题目: Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = ...
- bzoj 4066 简单题——KDtree(带重构)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4066 带部分重构的KDtree.就是那个替罪羊树思想的. 写了对拍,调了半天,发现忘了 re ...
- PythonPath在Windows 下的设置
今天在调试Evernote SDK时, 遇到PythonPath的问题. 查了很多资料,有说用系统环境变量添加PythonPath, 有说在注册表中的PythonPath添加新Default字段, 但 ...