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. ASP.NET AJAX应用

    ASP.NET AJAX能够快速地创建具有丰富的用户体验的页面,而且这些页面由可靠和熟悉的用户接口元素组成,包括一个能快速响应的用户体验和熟悉的用户元素. 使用ASP.NET  AJAX,可以改善We ...

  2. hdu2639,第K优决策

    在dp问题中如果遇到问题,没有什么是加一维度不能解决的,如果不能,再加一维度. #include<iostream> #include<cstring> #include< ...

  3. PHP MySQL 连接数据库,进行增、删、改、查、操作

    <table width="100%" border="1" cellpadding="0" cellspacing="0& ...

  4. sql server 数据分析优化实战(一)——SQL语句优化

    前言 在我们进行数据分析的时候,首要的目标是根据业务逻辑,通过编写SQL代码得到我们想要的结果,这是毋庸置疑的.一般情况下,由于我们分析的数据量比较少,体会不出SQL语句各种写法的性能优劣,对SQL代 ...

  5. javascript的严格模式:use strict

    ECMAscript 5添加的运行模式,禁止一些非标准.不安全的操作. <script> "use strict"; console.log("这是严格模式. ...

  6. UIWebview 截获html并修改内容。

    需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果: 方法:通过js截获UIWebView中的html,然后修改html标签内容:  实例代码:  服务 ...

  7. mysql存储过程之遍历多表记录后插入第三方表中

    自从学过存储过程后,就再也没有碰过存储过程,这是毕业后写的第一个存储过程. 因为项目里设备的种类比较多,分别存在不同的数据表中,java中对应不同的java bean对象,想要统一管理有点困难.最近正 ...

  8. ES6 作用域的问题

  9. 数据库操作(二)SOQL

    1.SOQL SOQL是对象查询语言.它可以在单个sObject中在给定标准上搜索记录. 2.SELECT语句 [格式]SELECT 列名称 FROM 表名称 [示例] 3.SELECT...WHER ...

  10. swift-UINavigationController纯代码自定义导航控制器及底部工具栏的使用

    step1:自定义一个类  NTViewController,该类继承UITabBarController: // // NTViewController.swift // Housekeeper / ...