CF327C Magic Five 题解
前置知识
解法
设 \(lena\) 表示 \(a\) 的长度。
首先,若一个数能被 \(5\) 整除,则该数的末尾一定为 \(0\) 或 \(5\)。故考虑枚举 \(a\) 中所有的 \(0\) 和 \(5\) 的下标,设此下标后面有 \(x\) 个数字,由于 \(s\) 是由 \(a\) 复制 \(k\) 遍形成的,所以此下标的贡献为 \(\begin{aligned}\sum\limits_{i=0}^{k-1}2^{x+i \times lena}=2^x \sum\limits_{i=0}^{k-1} (2^{lena})^i=2^x \dfrac{2^{lena} \times (2^{lena})^{k-1}-(2^{lena})^0}{2^{lena}-1}=2^x \dfrac{(2^{lena})^{k}-1}{2^{lena}-1} \end{aligned}\)。对于分母中的 \(2^{lena}-1\) 处理其逆元即可。
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define sort stable_sort
#define endl '\n'
char a[100002];
ll qpow(ll a,ll b,ll p)
{
ll ans=1;
while(b)
{
if(b&1)
{
ans=ans*a%p;
}
b>>=1;
a=a*a%p;
}
return ans%p;
}
int main()
{
ll k,lena,i,ans=0,num,sum,p=1000000007;
cin>>(a+1)>>k;
lena=strlen(a+1);
num=qpow(2,lena,p);
sum=(qpow(num,k,p)-1+p)*qpow(num-1,p-2,p)%p;
for(i=lena;i>=1;i--)
{
if(a[i]=='0'||a[i]=='5')
{
ans=(ans+qpow(2,i-1,p)*sum%p)%p;
}
}
cout<<ans<<endl;
return 0;
}
CF327C Magic Five 题解的更多相关文章
- UVA471 Magic Numbers 题解
1.题目 题意很简单:输入n,枚举所有的a,b,使得 (1)满足a/b=n. (2)满足a,b各个位上的数字不相同. 2.思路 (1)对于被除数,要满足各个位上的数字,显然最大枚举到987654321 ...
- CF1042E Vasya and Magic Matrix 题解
题目链接 思路分析 看到题目中 \(n,m \leq 1000\) ,故直接考虑 \(O(n^2)\) 级别做法. 我们先把所有的点按照 \(val\) 值从小到大排序,这样的话二维问题变成序列问题. ...
- 2013/7/16 HNU_训练赛4
CF328B Sheldon and Ice Pieces 题意:给定一个数字序列,问后面的数字元素能够组成最多的组数. 分析:把2和5,6和9看作是一个元素,然后求出一个最小的组数就可以了. #in ...
- 题解 CF327C 【Magic Five】
这道题带坑,假如没有发现肯定会爆. 首先先搜索一遍0和5,储存在数组a里面. 那么应当有2 ^ a1 +2 ^ a2 +...+ 2 ^ an. 然而这道题没那么简单,数串还可以重复k次. 因此,需要 ...
- 题解-Magic Ship
Magic Ship 你在 \((x_1,y_1)\),要到点 \((x_2,y_2)\).风向周期为 \(n\),一个字符串 \(s\{n\}\) 表示风向(每轮上下左右),每轮你都会被风向吹走一格 ...
- [题解] 2019牛客暑期多校第三场H题 Magic Line
题目链接:https://ac.nowcoder.com/acm/contest/883/H 题意:二维平面上有n个不同的点,构造一条直线把平面分成两个点数相同的部分. 题解:对这n个点以x为第一关键 ...
- PAT甲题题解-1037. Magic Coupon (25)-贪心,水
题目说了那么多,就是给你两个序列,分别选取元素进行一对一相乘,求得到的最大乘积. 将两个序列的正和负数分开,排个序,然后分别将正1和正2前面的相乘,负1和负2前面的相乘,累加和即可. #include ...
- FZU 2280 Magic(字符串Hash)题解
题意:给你n个字符串,每个字符串有一个值w,有q次询问,一共两种操作:一是“1 x y”表示把第x个串的w变为y:二是“2 x”,输出第x个串能放几次魔法.放魔法的条件是这样:用串x放魔法,如果在1~ ...
- [题解]Magic Line-计算几何(2019牛客多校第三场H题)
题目链接:https://ac.nowcoder.com/acm/contest/883/H 题意: 给你偶数个点的坐标,找出一条直线将这n个点分成数量相等的两部分 并在这条直线上取不同的两个点,表示 ...
- 题解【洛谷P2730】魔板 Magic Squares
题面 首先我们可以发现,在每一次 BFS 时按照 \(A→B→C\) 的顺序枚举遍历肯定是字典序最小的. 然后就是普通的 BFS 了. 我们考虑使用 \(\text{STL map}\) 来存储起点状 ...
随机推荐
- Android——SQLiteOpenHelper
使用步骤: 新建一个继承自SQLiteOpenHelper的数据库操作类,提示重写onCreate和OnUpgraed两个方法.其中,onCreate方法只在第一次打开数据库时执行,在此可进行表结构创 ...
- Go-连接redis
- [转帖]JVM(3)之垃圾回收(GC垃圾收集器+垃圾回收算法+安全点+记忆集与卡表+并发可达性分析......)
<深入理解java虚拟机>+宋红康老师+阳哥大厂面试题2总结整理 一.堆的结构组成 堆位于运行时数据区中是线程共享的.一个进程对应一个jvm实例.一个jvm实例对应一个运行时数据区.一个运 ...
- [转帖]LVS入门篇(三)之LVS的工作模式和调度算法
LVS入门篇(三)之LVS的工作模式和调度算法 https://www.cnblogs.com/linuxk/p/9358512.html 1.NAT模型 (1)原理图: ①.客户端(200.10.1 ...
- [转帖]华为OpenEuler欧拉系统添加epel源方法
https://blog.whsir.com/post-7002.html 由于国产华为OpenEuler欧拉系统的版本命名是22.03.22.03这种,并且在查看版本的路径中是/etc/open ...
- [转帖]Linux命令拾遗-%iowait指标代表了什么?
https://www.cnblogs.com/codelogs/p/16060759.html 简介# 一直以来,我都知道top.vmstat.mpstat中有一个叫wa(%iowait)的cpu指 ...
- [转贴]更改 CMD 编码(解决 VSJupyter 乱码)
https://zhuanlan.zhihu.com/p/521376336 以 将编码更改为 UTF-8 为例 1. 临时修改编码 运行 CMD 输入 chcp 查看当前的代码页 (代码页和国家/地 ...
- Linux的free命令与OOM的简单总结
简介 查看操作系统配置最关键的几个命令是 lscpu 查看CPU信息 以及free 查看内存信息. 不过free信息有一个疑惑点 他的 free的值可能很小. 会让搭建产生误解. 这里简单说明一下. ...
- CentOS7上面一键部署rabbitmq的简单方法
1. rabbitmq的安装部署比redis之类的要麻烦一些. 主要是他是基于erlang写的 而不是基于c或者是c++写的 2. 很多时候编译需要添加很多组件, 但是一些机器可能不会让添加这么多的组 ...
- 文盘Rust -- 领域交互模式如何实现
作者:京东科技 贾世闻 文盘Rust -- 领域交互模式如何实现 书接上文,上回说到如何通过interactcli-rs四步实现一个命令行程序.但是shell交互模式在有些场景下用户体验并不是很好.比 ...