标签:个人 mic images F12 return alt 技术 color 多次
2个数N和K,表示N个人,数到K出列。(2 <= N <= 10^18, 2 <= K <= 1000)
最后剩下的人的编号
3 2
3
—————————————————————————————————
这道题 首先约瑟夫环满足 f[n]=(f[n-1]+k)%n
这样的话我们要想办法除去这些冗杂的过程

这样我们假设n很大的时候 要很多次才需要%mod 所以我们可以加速这个过程
#include<cstdio> #include<cstring> #include<algorithm> #define LL long long using std::min; LL n,k,ly,now,lv; int main(){ scanf("%lld %lld",&n,&k); ly=1; now=0; if(n<=5000){ while(ly<n) now=(now+k)%(++ly); printf("%lld\n",now+1); } else{ while(ly<4*k) now=(now+k)%(++ly); while(ly<n){ lv=min((ly-now)/k,n-ly-1); now=now+lv*k; ly+=lv; now=(now+k)%(++ly); }printf("%lld\n",now+1); } return 0; }
标签:个人 mic images F12 return alt 技术 color 多次
原文地址:http://www.cnblogs.com/lyzuikeai/p/7694657.html