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. 百度之星2017初赛B1006 小小粉丝度度熊

    思路: 考虑到补签卡一定是连续放置才更优,所以直接根据起始位置枚举.预先处理区间之间的gap的前缀和,在枚举过程中二分即可.复杂度O(nlog(n)). 实现: #include <iostre ...

  2. HDU3949 XOR(线性基第k小)

    Problem Description XOR is a kind of bit operator, we define that as follow: for two binary base num ...

  3. wordpress 你所不知道的固定链接设置方法,设置适合自己的个性固定链接,适合SEO

    %year% 年份,四位数字,例如2004年  %monthnum% 一年的月份,例如05  %day% 一个月的日子,例如28  %hour% 一天中的小时,例如15  %minute% 小时,例如 ...

  4. wampserver修改mysql数据库密码的简单方式

    刚装好的wampserver的数据库是没有密码的,所以可以直接登录,要设置密码,一种简单的方式如下: 打开phpMyadmin 初始状态没有密码,可以直接登录 登录之后,点击账户 点击修改权限,设置你 ...

  5. 设计模式——“signleton”

    那天别人问了我一个问题,关于单例模式的,由于之前了解的都是蜻蜓点水,所以重新复习了一次重新总结. 单例模式的写法总的来说有5种:懒汉,恶汉,枚举,双重校验锁,静态内部类 懒汉 public class ...

  6. 重绘DataGridView的DataGridViewCheckBoxCell控件

    最近项目中要用到在DataGridView单元格里面放置一个带有文本的 DataGridViewCheckBoxCell控件但原有 的是不支持的然后我就想着重写个 DataGridViewCheckB ...

  7. CVPR2016 Paper list

    CVPR2016 Paper list ORAL SESSIONImage Captioning and Question Answering Monday, June 27th, 9:00AM - ...

  8. php第十四节课

    投票 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...

  9. MySQL5.7本地首次登录win10报错修改

    1.打开MySQL目录下的my.ini文件,在文件的最后添加一行“skip-grant-tables”,保存并关闭文件.(Win10默认安装,my.ini在C:\ProgramData\MySQL\M ...

  10. java堆排序实现

    代码如下: public class HeapSort { public static void heapSort(DataWrap[] data) { System.out.println(&quo ...