【思维+大数(高精度)】number 计蒜客 - 45276
题目:
求 1 到 10^n 的数字中有 3 的数字的数量。
输入格式
1 个整数 n。
输出格式
共一行,1 个整数,表示答案。
数据范围
对于 10% 的数据,n≤8
对于 30% 的数据,n≤18
对于 100% 的数据,n≤1000
Sample Input
2
Sample Output
19
题解:
当n=1000时,1e1000内有部分是3e999,这里有1e999个含有数字3的数字,所以很明显该题是大数运算或者是规律题。
进行简单的模拟,
n=1,有ans=1;即10之内只有3;
n=2,有ans=19;即100之内有03,13,23...93,10个与30,31...39,10个,同时因为33是两类的交集,所以要去掉重复的一个;
n=3,有ans=271;1000之内有10个x00~x99, 同时有300~399,(x表示任意数字),即有10个ans2和100,再去除重复的3xx里面的19个重复
所以ans3=ans2*10+100-ans2;
n=4,有ans=3439;同理可得ans4=ans3*9+1e(n-1);
所以可归纳出:ansn=ans(n-1)*9+1e(n-1);(n>=2)
ans1=1;
根据该公式可判断出输出并未又整齐固定的规律,所以该题是大数运算。
根据公式可以判断需要用到大数加分和大数乘法。
大数运算其实就是通过数组模拟的数学运算,数组的每一数值表示是一个10进制的位,大数加法就是把每位数字相加并进位,大数乘法就是模拟小学学的那种运算方法,将一个乘数的每一个位乘另一个乘数,并求和。
AC代码:
#include<iostream>
#include<cstring>
#define max(a,b){(((a)>(b))?(a):(b))}
#define claer(x){memset(x,0,sizeof(x));}
using namespace std; int ans[];
int tmp1[];int _9[];
int _10[]; int add(int *a, int alen, int *b, int blen) {
int len = max(alen, blen);
for (int i = ; i < len; i++) {
a[i] += b[i];
a[i + ] += a[i] / ;
a[i] %= ;
}
len++;
while (a[len]==)len--;
return len+;
} int mul(int *a, int alen, int *b, int blen) {
claer(tmp1);
int t2len = ;
for (int i = ; i < blen; i++) {
for (int j = ; j < alen; j++) {
tmp1[i + j] += b[i] * a[j];
tmp1[i + j + ] += tmp1[i + j] / ;
tmp1[i + j] %= ;
} }
int n = alen + blen+;
while (tmp1[n]==)n--;
for (int i = ; i <= n; i++)
a[i] = tmp1[i];
return n+;
} int main() {
#if 0
//freopen("number.in", "r", stdin);
//freopen("number.out", "w", stdout);
#endif
int n, len = ;
cin >> n;
ans[] = ;
_9[] = ;
for (int i = ; i < n; i++) {
len = mul(ans, len, _9, ); _10[i] = ;
_10[i - ] = ; len = add(ans, len, _10, i + );
} for (int i = len - ; i >= ; i--) {
printf("%d", ans[i]);
} }
【思维+大数(高精度)】number 计蒜客 - 45276的更多相关文章
- 计蒜客 28449.算个欧拉函数给大家助助兴-大数的因子个数 (HDU5649.DZY Loves Sorting) ( ACM训练联盟周赛 G)
ACM训练联盟周赛 这一场有几个数据结构的题,但是自己太菜,不会树套树,带插入的区间第K小-替罪羊套函数式线段树, 先立个flag,BZOJ3065: 带插入区间K小值 计蒜客 Zeratul与Xor ...
- 计蒜客:Entertainment Box
Ada, Bertrand and Charles often argue over which TV shows to watch, and to avoid some of their fight ...
- 计蒜客 A1607 UVALive 8512 [ACM-ICPC 2017 Asia Xi'an]XOR
ICPC官网题面假的,要下载PDF,点了提交还找不到结果在哪看(我没找到),用VJ交还直接return 0;也能AC 计蒜客题面 这个好 Time limit 3000 ms OS Linux 题目来 ...
- 计蒜客 作弊揭发者(string的应用)
鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...
- 计蒜客的一道题dfs
这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...
- 计蒜客模拟赛5 D2T1 成绩统计
又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...
- 计蒜客 等边三角形 dfs
题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...
- 计蒜客 方程的解数 dfs
题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...
- 计蒜客 买书 dfs
题目: https://www.jisuanke.com/course/2291/182236 思路: 递归解决,从第一本书开始,每本书都有两种选择: //index是book里面每本书价格的下标, ...
随机推荐
- ES6 基本语法:
ES6.基本语法* ES6可以使用=>作为函数表达形式,简单的风格: 参数 + => +函数体;* 在JS中是以var定义一个变量 ,在ES6中是以let定义变量; let 和 var 区 ...
- 使用JUnit 和Jacoco进行单元测试
Jacoco配置 <dependency> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven ...
- 尚硅谷ajax视频教程2
7.7. 尚硅谷_佟刚_Ajax_典型应用_验证用户名是否可用 整个项目的目录路径如下所示 我们首先新建立一个web工程,在webroot下面新建立一个script的文件夹,导入jquer文件 接下来 ...
- Idea 可用激活方式
链接:https://pan.baidu.com/s/14ljbzMJ6uF9zKcQ575ftFA 提取码:yd54
- ES6 promise用法总结
一 什么时候promise? promise是异步编程的一个解决方案,是一个构造函数,身上带着all,resolve,reject,原型上有cath,then等方法 promise有两个特点: 1 ...
- shell基本正则表达式
基本正则表达式 星号* 匹配它前面的字符串或正则表达式任意次(包括0次).比如,“1122*” 将匹配11+1个或多个2,其可能匹配的字符串将是112.1122.112222.11223343等 句点 ...
- ubuntu无法安装vim、tree等解决办法
rm /etc/apt/sources.list.d/* 删除该目录下所有文件
- Python实用笔记 (27)面向对象高级编程——使用枚举类
枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例.Python提供了Enum类来实现这个功能: from enum import Enum Month = Enum('Mon ...
- Flask项目实战:创建电影网站(3)后台的增删改查
添加预告 根据需求数据库创建表格 需求数据库,关键字title logo # 上映预告 class Preview(db.Model): __tablename__ = "preview&q ...
- git和github入门指南(5)
5.github上的标签 5.1.标签的作用 给当前版本打一个标签,在github上就会形成一个releases版本 点击进去后,用户就可以下载对应版本的源代码 5.2.在本地git工具上创建标签,同 ...