2016"百度之星" - 初赛(Astar Round2A)1001 All X(HDU5690)——找循环节|快速幂
一个由m个数字x组成的新数字,问其能否mod k等于c。
先提供第一种思路,找循环节。因为每次多一位数都是进行(t*10+x)mod k(这里是同余模的体现),因为x,k都确定,只要t再一样得到的答案一定一样。所以在一步一步中进行时一旦出现了一个之前出现过的数字,那么很显然后面就要开始进行循环了。找出这个循环节,然后把m放到这个循环节里头就行(这里的说法有问题,见下文的第二点)。
但是这里有两个要注意的地方,第一是只有当前出现的数一样才能保证下一个出现的数一样,而并不代表着,当前的数一样,得到它的数就一样,因此,第一个数并不一定参与循环。不妨举个最简单的例子,这一系列的数字是,3,4,5,6,4,5,6,4,5,6。。。第一个3并不参与循环。其实也好理解,一个分数,其分母和分子一样,所以也相当于一直进行同样的操作,最后一定会处于循环状态(不循环的话视作一直0循环),但是很显然的第一位小数不一定是参与循环的部分。
第二点是,基于上一点,m如果较小的话不一定处于循环节内,那么就没办法把它放到循环节里头,那么直接从1算到m即可。
下面给出的学长的代码,很巧妙的解决了所有的问题:
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long LL;
const int N = + ;
LL pos[N];
LL x, m, k, c;
int main(){
int T;
int cas = ;
scanf("%d", &T);
while(T --){
memset(pos, -, sizeof(pos));
scanf("%I64d%I64d%I64d%I64d", &x, &m, &k, &c);
printf("Case #%d:\n", cas ++);
int tmp = ;
LL d;
for(LL i = ; i <= m; i ++){
tmp = tmp * + x;
tmp %= k;
if(pos[tmp] == -){
pos[tmp] = i;
}else{
d = i - pos[tmp];
i += (m - i) / d * d;
if(i > m) i -= d;
for(LL j = i+; j <= m; j ++){
tmp = tmp * + x;
tmp %= k;
}
break;
}
}
if(tmp == c) puts("Yes");
else puts("No");
}
}
第二种方法是快速幂,很巧妙,直接搬运别人的博客了:http://www.cnblogs.com/inmoonlight/p/5515538.html 直接没几行代码就没了,也是厉害。。
2016"百度之星" - 初赛(Astar Round2A)1001 All X(HDU5690)——找循环节|快速幂的更多相关文章
- 2016百度之星-初赛(Astar Round2A)AII X
Problem Description F(x,m) 代表一个全是由数字x组成的m位数字.请计算,以下式子是否成立: F(x,m) mod k ≡ c Input 第一行一个整数T,表示T组数据. 每 ...
- 2016"百度之星" - 初赛(Astar Round2B) 1006 中位数计数
思路:统计当前数左边比它小|大 i个人,相应右边就应该是比它大|小i个人 l数组表示左边i个人的方案 r表示右边i个人的方案 数组下标不可能是负数所以要加n //#pragma comment(lin ...
- 2016"百度之星" - 初赛(Astar Round2A)HDU 5695 拓扑排序+优先队列
Gym Class Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- 2016百度之星 初赛2A ABEF
只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...
- HDU 5690:2016"百度之星" - 初赛 All X
原文链接:https://www.dreamwings.cn/hdu5690/2657.html All X Time Limit: 2000/1000 MS (Java/Others) Mem ...
- 2016"百度之星" - 初赛(Astar Round2A)
题目链接: http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=701 1001 : 矩阵快速幂 #include <iostre ...
- 2016"百度之星" - 初赛(Astar Round2A)Gym Class(拓扑排序)
Gym Class Accepts: 849 Submissions: 4247 Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65 ...
- 2016"百度之星" - 初赛(Astar Round2A)All X(数学 矩阵)
All X Accepts: 1281 Submissions: 7580 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...
- 2016"百度之星" - 初赛(Astar Round2A) 1004 D Game 区间DP
D Game Problem Description 众所周知,度度熊喜欢的字符只有两个:B 和D. 今天,它发明了一个游戏:D游戏. 度度熊的英文并不是很高明,所以这里的D,没什么高深的含义,只 ...
随机推荐
- 基于Docker的Kafka部署
一 准备 1.1 安装docker-dompose #部署 sudo curl -L "https://github.com/docker/compose/releases/download ...
- EF中DbContext的生命周期
/// <summary>/// 依赖注入系统中类的生命周期./// </summary>public enum DependencyLifeStyle{ /// < ...
- 基于【 centos7】三 || 分布式文件系统FastDFS+Nginx环境搭建
1. FastDFS介绍 1.1 FastDFS定义 FastDFS是用c语言编写的一款开源的分布式文件系统.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用 ...
- webpack最基本的使用方式
1.创建文件夹"webpack-study" 2.使用webstrom打开文件夹所在位置.在根目录上创建一个文件,文件命名为“src”,在src文件下新建css.images.js ...
- Vivado问题集锦
1.添加包含子IP的模块到block design,报错如下所示: 错误的后面提供了解决方法:在tcl命令行中输入如下指令,添加子IP的xci文件即可. set_property generate_s ...
- JS密码强度检测
//校验密码强度---沒有匹配到以下級別就提示 function checkPassWord(value){ // 0: 表示第一个级别 1:表示第二个级别 2:表示第三个级别 // 3: 表示第四个 ...
- 【SpringMVC】入门
一.概述 1.1 SpringMVC是什么 1.2 MVC在b/s系统的应用 1.3 SpringMVC 原理 二.入门程序 2.1 需求 2.2 引入依赖 2.3 前端控制器 2.4 springm ...
- HTML锚点的使用
锚点: 连接到的本页面的位置:
- 4.Hbase Shell 命令
Hbase提供了一个shell的终端给用户交互:#$HBASE_HOME/bin/hbase shell,执行quit命令可以退出命令行 2.使用Hbase Shelll 命令操作: 名称 命令表达式 ...
- 09_Azkaban案例实践2_Command多job工作流flow
1.Command类型多job工作流flow 1.创建有依赖关系的多个job描述:第一个job:foo.job # foo.job type=command command=echo foo 2.第二 ...