虽然知道是置换,却很久没有思路。忽然想到,由初始状态A经过变换后回到A状态,应该是不停循环可重复的。于是,猜想数字的位置也是重复循环的。拿了个例子验证了一下,某然是这样。例如第二个10,3的例子有1-》4-》3-》10-》1.

于是,可以按照上题的方法求解了。

#include <iostream>
#include <algorithm>
#include <cstdio>
#define LL __int64
#define N 800
using namespace std; int num[N+1];
bool vis[N+1];
int stack[N+1],top; LL gcd(LL a,LL b){
if(b==0) return a;
return gcd(b,a%b);
} int main(){
int n,k;
while(scanf("%d%d",&n,&k),n||k){
if(n<=k){
printf("1\n");
continue;
}
memset(vis,false,sizeof(vis));
int counted=0;
for(int i=1;i<=n;i++){ //此处是可以优化的,可以通过计算来做。
if(!vis[i]){
int tmp=i;
top=0;
while(tmp<=n){
vis[tmp]=true;
stack[++top]=tmp;
tmp+=k;
}
while(top>0){
num[++counted]=stack[top];
top--;
}
}
}
memset(vis,false,sizeof(vis));
top=0;
for(int i=1;i<=n;i++){
if(!vis[i]){
int k=i;
counted=0;
while(!vis[k]){
vis[k]=true;
k=num[k];
counted++;
}
stack[++top]=counted;
}
}
LL ans=(LL)stack[top--];
for(int i=top;i>0;i--){
ans=ans*((LL)stack[i]/gcd(ans,(LL)stack[i]));
}
printf("%I64d\n",ans);
}
return 0;
}

  

HDU 4259的更多相关文章

  1. hdu 4259 Double Dealing

    思路: 找每一个数的循环节,注意优化!! 每次找一个数的循环节时,记录其路径,下次对应的数就不用再找了…… 代码如下: #include<iostream> #include<cst ...

  2. HDU 4259 - Double Dealing(求循环节)

    首先将扑克牌进行一次置换,然后分解出所有的循环节,所有循环节的扑克牌个数的最小公倍数即为答案 #include <stdio.h> #include <string.h> #i ...

  3. HDU 4259(Double Dealing-lcm(x1..xn)=lcm(x1,lcm(x2..xn))

    Double Dealing Time Limit: 50000/20000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  6. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  7. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  8. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

  9. HDU 1796How many integers can you find(容斥原理)

    How many integers can you find Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d ...

随机推荐

  1. Apach配置本地域名

    分三步: 一,开启虚拟域名设置,在路径中找到(apache\apache2.4.9\conf)httpd.conf 配置文件, 去掉 " Include conf/extra/httpd-v ...

  2. c#远程链接服务器中MySQL

    转自原文 c#远程链接服务器中MySQL 1.要连接MySQL数据库必须首先下载mysql官方的连接.net的文件,文件下载地址为http://dev.mysql.com/downloads/conn ...

  3. HDU 4355

    只能说感觉是三分吧,因为两端值肯定是最大的,而中间肯定存在一点使之最小,呃,,,,猜 的... #include <iostream> #include <cstdio> #i ...

  4. HDU 4345

    细心点想,就明白了,题目是求和为N的各数的最小公倍数的种数.其实就是求N以内的各素数的不同的组合(包含他们的次方),当然,是不能超过N的.用Dp能解决.和背包差不多. #include <ios ...

  5. HDU 1788

    必须MARK下:任何时候都要保持清醒头脑,不要被题目绕了.. 其实就是求最小公倍数. #include <iostream> #include <cstdio> #includ ...

  6. bash脚本编程知识储备

    bash脚本编程:     脚本程序:解释器解释执行: 首先得理清一些琐碎的知识点,我尽量把我所学的帮朋友一起梳理一下 编程环境:(我会在接下来的篇章,图文例子三结合的方式带大家一起学习)       ...

  7. node 上传文件 http client to post file

    node做http client 发送post数据是很容易的事情,但要上传文件就不是太容易了主要是因为上传文件的报文和普通post是不太一样的 要了解http post可以看下这个 https://i ...

  8. Linux 下配置,安装Hadoop

    1.从官网上下载hadoop-2.4.1.tar.gz,我的版本为hadoop-2.4.1,可在http://pan.baidu.com/s/1cLAKCQ 下载. 2.解压hadoop-2.4.1. ...

  9. Apache支持多端口配置处理

    玩了这么多年,终于知道原来Apache也可以支持多个端口监听!!!!!!!!!!!!!!!!!!!这样就可以一个服务器,存放多个项目了,一个ip多个端口,匹配多个项目. 试了下linux,也是可以的 ...

  10. 利用JDBC或者事物或者调用存储过程实现往MySQL插入百万级数据

    转自:http://www.cnblogs.com/fnz0/p/5713102.html 想往某个表中插入几百万条数据做下测试, 原先的想法,直接写个循环10W次随便插入点数据试试吧,好吧,我真的很 ...