2022-03-31每日刷题打卡

代码源——每日一题

完美数 - 题目 - Daimayuan Online Judge

对于给定的数字 a , b ,当整数 n 在十进制下的所有数位都为 a 或 b 时,我们称 n 是“好数”

对于好数 n ,当 n在十进制下每一位的数字之和也为“好数”时,我们称 n 是一个“完美数”

请你求出有多少 m 位数是“完美数”

输入格式

输入一行三个整数 a , b , m , 含义如题面所示 (1≤m≤10^6,1≤a,b≤9)。

输出格式

输出一行一个整数表示完美数的数量 , 由于答案可能很大 , 请你将答案对 10^9+7 取模

样例输入

5 1 5

样例输出

1

样例解释

只有 11111 满足要求

这题要求是,找出m位数的完美数。注意是m位数,比如5位数那就是10w,这里m最多可以取到10^6,这是相当吓人的,所以说也不用想着通过枚举来判断每一位是不是a或b了。但是我们完全可以反过来,既然好数是只有a和b的是数,那我们就用a和b排列出m位数,那他就是好数了。但完美数怎么办呢,一样的想法,完美数是好数各位数加起来仍然是好数,这里好数只有a和b组成,那么各位数之和就是x个a+y个b。我们只要枚举a或b的个数(x或y),然后计算出x*a+y *b,再看这个和是否是好数即可。如果是好数,那么说明x个a和y个b组成的m位数就将是个完美数。然后只要计算出他们的排列组合即可。

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<math.h>
#include<set>
#include<numeric>
#include<string>
#include<string.h>
#include<iterator>
#include<map>
#include<unordered_map>
#include<stack>
#include<list>
#include<queue>
#include<iomanip>#define endl '\n';
typedef long long ll;
typedef pair<ll, ll>PII;
const int MOD = 1e9 + 7, N = 1e6 + 10;ll fact[N], infact[N];ll qmi(int a, int b)
{ll res = 1;while (b){if (b & 1) res = res * a % MOD;a = a * (ll)a % MOD;b >>= 1;}return res;
}void init()
{fact[0] = infact[0] = 1;for (int i = 1; i < N; i++)fact[i] = fact[i - 1] * i % MOD;infact[N - 1] = qmi(fact[N - 1], MOD - 2);for (int i = N - 2; i; i--)infact[i] = infact[i + 1] * (i + 1) % MOD;
}int C(int a, int b)
{return (fact[a] * infact[b] % MOD * infact[a - b] % MOD) % MOD;
}int main()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int a, b, m;cin >> a >> b >> m;init();char c = a + '0', d = b + '0';int x;ll res = 0;for (int i = 0; i <= m; i++){x = m - i;ll num = x * a + i * b;bool flag = true;while (num){if (num % 10 != a && num % 10 != b){flag = false;break;}num /= 10;}if (!flag)continue;res = (res + C(m,i)) % MOD;}cout << (res%MOD) << endl;return 0;
}

洛谷——线段树

P3372 【模板】线段树 1 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目描述

如题,已知一个数列,你需要进行下面两种操作:

  1. 将某区间每一个数加上 k
  2. 求出某区间每一个数的和。

输入格式

第一行包含两个整数 n, m,分别表示该数列数字的个数和操作的总个数。

第二行包含 n个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。

接下来 m 行每行包含 3 或 44 个整数,表示一个操作,具体如下:

  1. 1 x y k:将区间 [x, y] 内每个数加上 k。
  2. 2 x y:输出区间 [x, y] 内每个数的和。

输出格式

输出包含若干行整数,即为所有操作 2 的结果。

输入输出样例

输入 #1复制

5 5
1 5 4 2 3
2 2 4
1 2 3 2
2 3 4
1 1 5 1
2 1 4

输出 #1复制

11
8
20

说明/提示

对于 30% 的数据:m≤10。
对于 70% 的数据:m
≤10^4。
对于 100% 的数据:1≤n,m≤10^5。

保证任意时刻数列中任意元素的和在 [-2^{63}, 2^{63}) 内。

这里是基础树状数组的进阶版。如果还不会基础树状数组的可以去2022-03-29每日刷题打卡_你好_Ä的博客-CSDN博客看一看。

之前学到的地方是单点修改+区间和计算。用线段树我们可以在logn的复杂度下做到单点修改和区间和计算。但此时是区间修改,如果还是用一般的线段树,那效率是很低的,不如直接用数组。所以这里我们加入了一个新的概念:懒惰标记。

懒惰标记,简单来说,就是通过延迟对节点信息的更改,从而减少可能不必要的操作次数。每次执行修改时,我们通过打标记的方法表明该节点对应的区间在某一次操作中被更改,但不更新该节点的子节点的信息。实质性的修改则在下一次访问带有标记的节点时才进行。

也就是,当我们要在l到r区间的点都加上x时,我们找到管理这些区间的父节点而不是叶子节点,给这个父节点记录上大小为x的懒惰标记,这样当下次我们计算区间和时,就可以根据 懒惰标记*该区间的点数 知道这个区间通过1操作增加了多少总和。加上原本父节点存储的总和,就是我们要的区间总和了。
有了懒惰标记,我们就不用真的给区间的点都加上x,通过计算,我们还是可以通过logn的复杂度完成区间的修改和查询。

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<math.h>
#include<set>
#include<numeric>
#include<string>
#include<string.h>
#include<iterator>
#include<map>
#include<unordered_map>
#include<stack>
#include<list>
#include<queue>
#include<iomanip>#define endl '\n';
typedef long long ll;
typedef pair<ll, ll>PII;
ll n, m, a[100005], f[500050],lz[500050];void buildtree(int k, int l, int r)
{if (l == r){//到达叶节点后把值赋给树状数组f[k] = a[l];return;}int m = (l + r) / 2;//以m为中点分成左右buildtree(k + k, l, m);//左buildtree(k + k + 1, m + 1, r);//右f[k] = f[k + k] + f[k + k + 1];//父节点值是两个子节点的和
}void add(int k, int l, int r, int x, int y, ll c)
{if (l == x && y == r){lz[k] += c;return;}f[k] += (y - x + 1) * c;int m = (l + r) / 2;if (y <= m)add(k + k, l, m, x, y, c);elseif (x > m)add(k + k + 1, m+1, r, x, y, c);else{add(k + k, l, m, x, m, c);add(k + k + 1, m + 1, r, m + 1, y, c);}
}ll calc(int k, int l, int r, int x, int y, ll p)
{p += lz[k];if (l == x && y == r){return p * (r - l + 1) + f[k];}int m = (l + r) / 2;//看目标区间在左边还是右边if (y <= m)return calc(k + k, l, m, x, y, p);elseif (x > m)return calc(k + k + 1, m + 1, r, x, y, p);else return calc(k + k, l, m, x, m, p) + calc(k + k + 1, m + 1, r, m + 1, y, p);
}int main()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cin >> n >> m;for (int i = 1; i <= n; i++)cin >> a[i];buildtree(1, 1, n);while (m--){int t;cin >> t;if (t == 1){int x, y, c;cin >> x >> y >> c;add(1, 1, n, x, y, c);}else{int x, y;cin >> x >> y;cout << calc(1, 1, n, x, y, 0) << endl;}}return 0;
}

2022-03-31每日刷题打卡相关推荐

  1. 2022.10.14每日刷题打卡

    リモコン 题意: 题目描述: 高桥君要调整空调的设定温度.现在的设定温度是A度,而他想调到B度. 空调遥控器按一次可以: 上调或下调1度 上调或下调5度 上调或下调10度 高桥君想求出从A调到B度的最 ...

  2. 2022.11.14每日刷题打卡

    过山车 原题链接:传送门 二分图最大匹配模板题,但sb了数组开小了一直TLE,虽然是模板但很长教训. #include <bits/stdc++.h> using namespace st ...

  3. 2022-03-02每日刷题打卡

    2022-03-02每日刷题打卡 代码源--div2每日一题 Alice的德州扑克 - 题目 - Daimayuan Online Judge 德州扑克是目前世界上最流行的扑克游戏,全世界有众多相关的 ...

  4. 2022-03-03每日刷题打卡

    2022-03-03每日刷题打卡 力扣--每日一题 258. 各位相加 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数.返回这个结果. 示例 1: 输入: num = 38 输出 ...

  5. 2022-04-14每日刷题打卡

    2022-04-14每日刷题打卡 代码源--每日一题 上帝的集合 - 题目 - Daimayuan Online Judge 题目描述 现在上帝有一个空集合,现在他命令你为他执行下列三种操作 n 次, ...

  6. 2022-04-01每日刷题打卡

    2022-04-01每日刷题打卡 代码源--每日一题 Lusir的游戏 - 题目 - Daimayuan Online Judge Lusir 正在玩一个古老的基于 DOS 的游戏. 游戏中有 N+1 ...

  7. 2021-12-11每日刷题打卡

    2021-12-11每日刷题打卡 力扣--剑指offer 剑指 Offer 40. 最小的k个数 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字, ...

  8. 2022-03-10每日刷题打卡

    2022-03-10每日刷题打卡 力扣--每日一题 589. N 叉树的前序遍历 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 . n 叉树 在输入中按层序遍历进行序列化表示,每 ...

  9. 2022-02-15每日刷题打卡

    2022-02-15每日刷题打卡 AcWing--算法基础 900. 整数划分 - AcWing题库 一个正整数 n 可以表示成若干个正整数之和,形如:n=n1+n2+-+nk,其中 n1≥n2≥-≥ ...

最新文章

  1. 编译php时错误make ***[libphp5.la] Error 1
  2. 凝聚世界著名UNIX/Linux专家Sobell十年功力的巨著1
  3. bootstrapmodel确认操作框_提醒!2020国考报名确认最后一天!错过无法参加笔试
  4. .NET Core 使用RabbitMQ
  5. 树莓派+神经计算棒2实时人脸检测
  6. Linux下Weblogic 11g R1安装和配置
  7. jstorm 读取mysql_zookeeper,kafka,jstorm,memcached,mysql流式数据处理平台部署
  8. 外设驱动库开发笔记12:TSEV01CL55红外温度传感器驱动
  9. java质因数算法_Java实现的质因数分解操作示例【基于递归算法】
  10. 倒计时 1 天 | 年前不学习,年后无加薪!区块链开发者们不要纠结了!(内含赠票福利)...
  11. Eclipse用法和技巧四:生成说明文档1
  12. D. Powerful array 莫队算法或者说块状数组 其实都是有点优化的暴力
  13. 计算机邮件合并应用测试怎么做,四大实例干货:word邮件合并功能步骤详解教程...
  14. (Research)泛癌单细胞分析揭示肿瘤微环境中癌相关成纤维细胞的异质性和可塑性
  15. eclipse创建maven报错
  16. Python下载小说遮天
  17. 关于《后浪》的B站弹幕分析总结(四)——Python实现LDA内容主题挖掘及主题可视化
  18. 手淘图片库新特性解析
  19. 卷积云神经网络_卷积神经网络
  20. 微谈网页设计颜色搭配原则与方法

热门文章

  1. JScript js数组去重
  2. 2021百威中国全球管培项目暑期实习生 —— 即将起航!
  3. mindjet使用技巧
  4. 计算机配置的内存的容量为4g,安装内存4g2g可用的原因和处理
  5. 一个老工程师的心理话(转)
  6. Nuance 发布中文版 Power PDF 3,以卓越的用户体验、强大的文档转换功能以及出色的编辑准确性全面提升工作效率
  7. cmd命令解密Bitlocker
  8. 爬取博客园首页并定时发送到微信
  9. 利用EQEP实现编码器的位置与转速测量
  10. nsis卸载程序被当成病毒