Double Dealing

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

Total Submission(s): 1924    Accepted Submission(s): 679

Problem Description
Take a deck of n unique cards. Deal the entire deck out to
k players in the usual way: the top card to player 1, the next to player 2, the
kth to player k, the k+1st to player 1, and so on. Then pick up the cards – place player 1′s cards on top, then player 2, and so on, so that player
k’s cards are on the bottom. Each player’s cards are in reverse order – the last card that they were dealt is on the top, and the first on the bottom.

How many times, including the first, must this process be repeated before the deck is back in its original order?

 
Input
There will be multiple test cases in the input. Each case will consist of a single line with two integers,
n and k (1≤n≤800, 1≤k≤800). The input will end with a line with two 0s.
 
Output
For each test case in the input, print a single integer, indicating the number of deals required to return the deck to its original order. Output each integer on its own line, with no extra spaces, and no blank lines between answers.
All possible inputs yield answers which will fit in a signed 64-bit integer.
 
Sample Input
1 3
10 3
52 4
0 0
 
Sample Output
1
4
13
 
Source
 
Recommend
liuyiding   |   We have carefully selected several similar problems for you:  4257 

pid=4258" target="_blank">4258 

pid=4260" target="_blank">4260 

pid=4261" target="_blank">4261 4262 

 

求置换群循环节的lcm

注意lcm(x1..xn)=lcm(x1,lcm(x2..xn)!=x1*..*xn/gcd

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<cctype>
#include<ctime>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])
#define Lson (x<<1)
#define Rson ((x<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (100000007)
#define MAXN (1000000)
typedef long long ll;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return (a-b+(a-b)/F*F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
char s[]="no solution\n"; class Math
{
public:
ll gcd(ll a,ll b){if (!b) return a;return gcd(b,a%b);}
ll abs(ll x){if (x>=0) return x;return -x;}
ll exgcd(ll a,ll b,ll &x, ll &y)
{
if (!b) {x=1,y=0;return a;}
ll g=exgcd(b,a%b,x,y);
ll t=x;x=y;y=t-a/b*y;
return g;
}
ll pow2(ll a,int b,ll p)
{
if (b==0) return 1;
if (b==1) return a;
ll c=pow2(a,b/2,p);
c=c*c%p;
if (b&1) c=c*a%p;
return c;
}
ll Modp(ll a,ll b,ll p)
{
ll x,y;
ll g=exgcd(a,p,x,y),d;
if (b%g) {return -1;}
d=b/g;x*=d,y*=d;
x=(x+abs(x)/p*p+p)%p;
return x;
}
int h[MAXN];
ll hnum[MAXN];
int hash(ll x)
{
int i=x%MAXN;
while (h[i]&&hnum[i]!=x) i=(i+1)%MAXN;
hnum[i]=x;
return i;
}
ll babystep(ll a,ll b,int p)
{
MEM(h) MEM(hnum)
int m=sqrt(p);while (m*m<p) m++;
ll res=b,ans=-1; ll uni=pow2(a,m,p);
if (!uni) if (!b) ans=1;else ans=-1; //特判
else
{ Rep(i,m+1)
{
int t=hash(res);
h[t]=i+1;
res=(res*a)%p;
}
res=uni; For(i,m+1)
{
int t=hash(res);
if (h[t]) {ans=i*m-(h[t]-1);break;}else hnum[t]=0;
res=res*uni%p;
} }
return ans;
}
}S; int a[10000+10];
bool b[10000+10];
int p[10000+10];
int main()
{
// freopen("C.in","r",stdin);
// freopen(".out","w",stdout); int n,k;
while(cin>>n>>k)
{
if (n+k==0) return 0;
int s=0;
For(j,k)
for(int i=n/k*k+j>n?n/k*k+j-k:n/k*k+j;i>=1;i-=k) a[++s]=i; // For(i,n) cout<<a[i]<<' '; int tot=0; MEM(b)
For(i,n)
{
if (!b[i])
{
int t=i; b[i]=1;
int len=1;
do {
b[t]=1;
t=a[t]; ++len;
// cout<<t<<endl; } while (!b[t]);
len--; p[++tot]=len;
}
} sort(p+1,p+1+tot);
tot=unique(p+1,p+1+tot)-(p+1); // For(i,tot) cout<<p[i]<<' '; ll ans=1;
For(i,tot) ans=ans/S.gcd(p[i],ans)*p[i]; cout<<ans<<endl; } return 0;
}

HDU 4259(Double Dealing-lcm(x1..xn)=lcm(x1,lcm(x2..xn))的更多相关文章

  1. hdu 4259 Double Dealing

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

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

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

  3. HDOJ 4259 Double Dealing

    找每一位的循环节.求lcm Double Dealing Time Limit: 50000/20000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  4. hdu 4529 Double Dealing (置换群)

    # include <stdio.h> # include <algorithm> # include <string.h> using namespace std ...

  5. 有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M。 需要选出若干个x,使这几个x的和与 M 最接近。 请描述实现算法,并指出算法复杂度

    题目:有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M. 需要选出若干个x,使这几个x的和与 M 最接近. 请描述实现算法,并指出算法复杂度. 代码如下: #in ...

  6. HDU 1019 Least Common Multiple【gcd+lcm+水+多个数的lcm】

    Least Common Multiple Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  7. hdu 1908 Double Queue

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1908 Double Queue Description The new founded Balkan ...

  8. POJ-2429 GCD & LCM Inverse---给出gcd和lcm求原来两个数

    题目链接: https://cn.vjudge.net/problem/POJ-2429 题目大意: 给出两个数的gcd和lcm,求原来的这两个数(限定两数之和最小). 解题思路: 首先,知道gcd和 ...

  9. HDU 1568 double 快速幂

    Fibonacci Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

随机推荐

  1. Laravel5.1学习笔记19 EloquentORM 入门

    Eloquent:入门 简介 定义模型(model) Eloquent 模型规范 取出多个模型 取出单个模型 / 集合 取出集合 插入更新模型  基本插入 基本更新 大批量赋值 删除模型 软删除 查询 ...

  2. HTML TabIndex属性

    TabIndex作用: tabindex:全局属性.指示其元素是否可以聚焦(获得焦点),以及它是否/在何处参与顺序键盘导航(因通常使用tab键操作,顾因此得名). 当使用tab键在网页控件中进行导航时 ...

  3. UltraEdit(UE)window破解方法

      安装UltraEdit(一路下一步,无难点)成功后,打开软件弹出如下使用模式提示信息.   关掉UltraEdit软件,同时  断本机网络.重新打开UltraEdit软件:   点击[输入许可证密 ...

  4. eclipse安装python开发pydev插件

    eclipse安装python开发pydev插件 下载eclipse的python开发插件pydev http://pan.baidu.com/s/1qXHt8pI 下载python.exe,并安装. ...

  5. sqlserver 2014 删除主键约束

    truncate table menu SELECT * FROM sys.foreign_keys WHERE referenced_object_id=OBJECT_ID('menu'); --找 ...

  6. Makefile精髓篇【转】

    什么是makefile?或许非常多Winodws的程序猿都不知道这个东西,由于那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序猿,makefile还是 ...

  7. Springboot启动工程后,浏览器出现输入用户名和密码

    在使用spring boot的时候发现启动项目时,浏览器需要输入用户名和密码. baidu后发现是因为pom中引用了Spring Security,但是项目中没有使用,在pom中注释掉即可.

  8. Sping bean的作用域

    单例(Singleton):在整个应用中,只创建bean的一个实例.(默认) 原型(Prototype):每次注入或者通过Sping应用上下文获取的时候,都会创建一个新的bean. 回话(Sessio ...

  9. php省市区三级联动

    效果 步骤 前端:通过ajax请求获取数据,使用了jquery 页面一开始加载所有省份信息 ->当选择省下拉框后触发改变监听时间-change ->当选择市下拉框后触发改变监听时间-cha ...

  10. 学不好Python?我们分析看看正确的学习方法是什么-马哥教育

    提起对Python的印象,除了全能之外恐怕就是简单易学了.很多人都在推荐新手学Python入门,毕竟语法简单.语句简洁,所谓“人生苦短我用Python”绝不是一句空话.不过也不能忽视一点:Python ...