LuoGu-P1239计数器-强大的贡献
P1239 计数器
题意:就是求从1到n间,1~9一共出现的次数
这道题直接暴力是不科学的,因为N有 1e9;
然后我就看到了一个很好的从贡献思考的方法;
——>转自洛谷学神的方法:
楼下dalao都是数学方法和数位dp,看的本蒟蒻心慌慌
如果对高级方法难以理解的话,这里提供一种简单方法,虽然效率比dalao们差很多,但是对于本题已经够了
对于每一个数x,可以分为x/10000和x%10000两个部分(也就是前几位和后4位)
那么对于中间很大一段数字,同样的前几位会重复出现一万次,后4位就是0000-9999
所以对于中间这一段,可以枚举前几位,贡献值乘以1万,然后每枚举一个,0-9的出现次数加上4000就是后4位的贡献值
(0000-9999总共4万个数码,每个数码出现次数都相等)
然后前面的1-9999和最后一截 前几位没出现1万次的数暴力算就行了
这份代码绝对容易理解,而且对于这题也是0ms(自己理解了比较久。。。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
const int N = ; using namespace std;
int n,a[],b[]; void f(int x) //计算一个数中每个数码出现次数
{
while( x>) a[x%]++,x/=;
} int main(){
scanf("%d",&n);int x = n/N;
if(n<) //计算一个数中每个数码出现次数
{
for(int i=; i<=n; i++)
f(i);
}
else
{
for(int i=; i<N; i++)f(i); //算出前面的1-9999
for(int i=; i<x; i++) //算中间一段,方法如上面所述
{
memset(b,,sizeof(b));
int y = i;
while(y>) b[y%]++,y/=;
for(int i=; i<; i++)a[i]+=b[i]*N;
}
for(int i=; i<; i++)a[i]+=*(x-);//后4位的贡献值一次性加上,不用一个一个加
for(int i=x*N; i<=n; i++)f(i); //算最后的一些数
}
for(int i=;i<;i++)
printf("%d\n",a[i]); //输出
return ;
}
LuoGu-P1239计数器-强大的贡献的更多相关文章
- P2602 [ZJOI2010]数字计数&P1239 计数器&P4999 烦人的数学作业
P2602 [ZJOI2010]数字计数 题解 DFS 恶心的数位DP 对于这道题,我们可以一个数字一个数字的求 也就是分别统计区间 [ L , R ] 内部数字 i 出现的次数 (0<=i&l ...
- 洛谷 P1239 计数器
P1239 计数器 题目描述 一本书的页数为N,页码从1开始编起,请你求出全部页码中,用了多少个0,1,2,…,9.其中—个页码不含多余的0,如N=1234时第5页不是0005,只是5. 输入输出格式 ...
- CF961G Partitions
传送门 luogu 显然每个数的贡献可以一起算感性理解一下,于是答案就是权值总和乘以每个数被算了几次 那个"集合大小为\(|S|\)的集合权值为权值和乘\(|S|\)",可以看成一 ...
- Vue3发布半年我不学,摸鱼爽歪歪,哎~就是玩儿
是从 Vue 2 开始学基础还是直接学 Vue 3 ?尤雨溪给出的答案是:"直接学 Vue 3 就行了,基础概念是一模一样的." 以上内容源引自最新一期的<程序员>期刊 ...
- 转自自己的关于落谷计数器【p1239】的题解
本蒟蒻写这道题用了两天半里大概五六个小时.(我太弱了) 然后这篇题解将写写我经历的沟沟坎坎,详细的分析一下, 但是由于它很长,因此一定还有多余的地方,比如说我的 预处理,可能比较多余.但是我觉得,信息 ...
- Sql Server 内存相关计数器以及内存压力诊断
在数据库服务器中,内存是数据库对外提供服务最重要的资源之一, 不仅仅是Sql Server,包括其他数据库,比如Oracle,MySQL等,都是一类非常喜欢内存的应用. 在Sql Server服务器中 ...
- 10 个强大的开源 Web 流量分析工具(转帖)
Web 流量分析工具多不胜数,从 WebTrends 这样专业而昂贵的,到 Google Analytics 这样强大而免费的,从需要在服务器端单独部署的,到可以从前端集成的,不一而足.本文收集并介绍 ...
- 【转】Fresco之强大之余的痛楚
http://www.jianshu.com/p/5364957dcf49 开始之前 如果你有使用的心得,技巧,踩坑经历,希望贡献出来,我会在TODO中慢慢添加(^^)/ 关于Fresco Fresc ...
- Windows Azure 上的 Symfony,适用于 PHP 开发者的强大组合
发布于 2014-06-13 作者 陈 忠岳 Symfony 是针对 PHP 开发者的流行开源 Web 应用框架.现在,您可以更轻松地在 Windows Azure 上使用它,这都归功于 Ben ...
随机推荐
- Android Studio 蓝牙开发实例——基于Android 6.0
因项目需要做一个Android 的蓝牙app来通过手机蓝牙传输数据以及控制飞行器,在此,我对这段时间里写的蓝牙app的代码进行知识梳理和出现错误的总结. 该应用的Compile Sdk Version ...
- EditText 使用详解
极力推荐文章:欢迎收藏 Android 干货分享 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 一.EditText 继承关系 二.EditText 常用 ...
- vue之手把手教你写日历组件
---恢复内容开始--- 1.日历组件 1.分析功能:日历基本功能,点击事件改变日期,样式的改变 1.结构分析:html 1.分为上下两个部分 2.上面分为左按钮,中间内容展示,右按钮 下面分为周几展 ...
- springmvc原理详解(手写springmvc)
最近在复习框架 在快看小说网搜了写资料 和原理 今天总结一下 希望能加深点映像 不足之处请大家指出 我就不画流程图了 直接通过代码来了解springmvc的运行机制和原理 回想用springmvc用 ...
- 【0801 | Day 6】Python基础(四)
Part 13 流程控制之while循环 一.语法 while 条件 code 1 code 2 code 3 ... while True: print('*1'*100) print('*2' ...
- js常见兼容性问题以及解决方法
1.关于使用 event对象,出现的兼容性问题IE/Chrom: event.clientX;event.clientYFF/IE9以上/Chrom: 传参e e.clientX;e.client ...
- API开发之接口安全(二)-----sign校验
上一章 我们说了 sign的生成 那么 我们如何确定这个sign的准确性呢 下来 我们说说 校验sign的那些事 在拿到header里面的内容之后 我们首先需要对其内容的基本参数做一个校验 我们补充下 ...
- (九)c#Winform自定义控件-树
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- PHP危险函数总结学习
1.PHP中代码执行的危险函数 call_user_func() 第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数. 传入call_user_func()的参数不能为引用传递 ...
- Android UI控件常用库汇总
现在App的开发已经是非常成熟,涌现了一大批开源的工具.这些项目能够提高我们的搬砖效率.以下是一些在开发中比较常使用的控件和库. ListView WaveSwipeRefreshLayout 水滴效 ...