【思维+大数(高精度)】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里面每本书价格的下标, ...
随机推荐
- 一起玩转微服务(13)——AOP
一.什么是AOP编程 AOP: Aspect Oriented Programming 面向切面编程. 面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP), ...
- Laravel 如何在blade文件中使用Vue组件
Laravel 如何在blade文件中使用Vue组件 1. 安装laravel/ui依赖包 composer require laravel/ui 2.生成vue基本脚手架 php artisan u ...
- Python实用笔记 (22)面向对象编程——实例属性和类属性
由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(object): def __init__(se ...
- SpringBoot2.x的依赖管理
前提 这篇文章是<SpringBoot2.x入门>专辑的第1篇文章,使用的SpringBoot版本为2.3.1.RELEASE,JDK版本为1.8. 主要梳理一下SpringBoot2.x ...
- Myeclipse启动WebLogic 总是报账号密码无效<Authentication denied: Boot identity not valid
在MyEclipse下配置了Weblogic 11后,每次启动从报错: Critical> 看了下描述,是用户名及密码什么的问题,我想起来,配置Weblogic 的域的时候将密码改成了12345 ...
- js 字符串排序
this.regionsList = result.sort((a, b) => a.warehouseAreaCode.localeCompare(b.warehouseAreaCode)); ...
- python unittest自动测试框架
编写函数或者类时进行测试,确保代码正常工作 python unittest 模块提供了代码测试工具.按照定义测试包括两部分:管理测试依赖库的代码(称为‘固件’)和测试本身. 单元测试用于核实函数的某 ...
- 【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值
[SpringCloud]Gateway 配置全局过滤器获取请求参数和响应值 实现Ordered接口getOrder()方法,数值越小越靠前执行,记得这一点就OK了. 获取请求参数RequestBod ...
- flask的小错误
这几天刚学flask,根据录屏学代码的时候,遇到一个问题 基本能看懂错误,role_id是类的一个字段,应该是一个对象,最后发现是单词写错了,应该是大写的Column, db.Column(db.In ...
- 每天一个Linux命令(ls)
前提 文件路径的描述方式 只有1个盘,叫根目录/ 绝对路径:从根目录开始描述的文件路径描述方式,如/a/b/c.以/打头的路径描写法一定是绝对路径 相对路径:以相对于当前路径的文件路径描述 ...