嘟嘟噜

  • 题面
    • Description
    • Input
    • Output
    • Sample Input
    • Sample Output
    • Data Constraint
  • 思路
    • 方法一:O(Tnm)O(Tnm)O(Tnm)
    • 方法二:O(Tn)O(Tn)O(Tn)
      • code
    • 方法三:O(Tmlog⁡(n))O(Tm\log(n))O(Tmlog(n))
      • code

题面

Description

由于众所周知的原因, 冈部一直欠真由理一串香蕉.
为了封上真由理的嘴, 冈部承诺只要真由理回答出这个问题, 就给她买一车的香蕉:
一开始有n 个人围成一个圈, 从1 开始顺时针报数, 报出m 的人被机关处决. 然后下一个人再从1 开始报数, 直到只剩下一个人.
红莉栖: “这不就是约瑟夫问题吗…”
伦太郎: “助手你给我闭嘴!”
真由理虽然已经晕头转向了, 但听到有一车的香蕉, 两眼便放出了光芒.
“那个呢, 真由氏很想要一车子的香蕉呢. 如果可以帮帮我的话, 我可以把一些香蕉分给你哟, 诶嘿嘿. 拜托你啦.”

Input

第一行一个整数T, 表示数据组数.
接下来T 行, 每行两个整数n;m.

Output

对于每组数据, 输出一行一个整数, 表示幸存者的编号.

Sample Input

5
4 6
2 8
2 9
8 8
7 9

Sample Output

3
1
2
4
7

Data Constraint

思路

这道题就是经典的约瑟夫问题。

方法一:O(Tnm)O(Tnm)O(Tnm)

这种方法就是约瑟夫问题的纯暴力解法,在这里就不赘述了,可以自行研究一下。

方法二:O(Tn)O(Tn)O(Tn)

为了方便我们研究我们把它的编号定为000 ~ n−1n-1n−1。
如果我们设第kkk个人被踢出局(编号为k−1k-1k−1),则剩下的序列为:
k,k+1,k+2…n−2,n−1…0,1,2…k,k+1,k+2…n-2,n-1…0,1,2…k,k+1,k+2…n−2,n−1…0,1,2…
将序列整体减kkk,并对负数加上nnn:
0,1,2…,n−3,n−20,1,2…,n-3,n-20,1,2…,n−3,n−2
可以得出一个n−1n-1n−1阶的约瑟夫。由此我们可以得到一个递推,即:
ansn=(ansn−1+k)(modn)ans_n=(ans_{n-1}+k)\pmod{n} ansn​=(ansn−1​+k)(modn)

code

#include<cstdio>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
int t,n,m;
int main()
{//  fre(mayuri);scanf("%d",&t);for(int i=1;i<=t;i++){scanf("%d%d",&n,&m);int ans=0;for(int j=1;j<=n;j++)ans=(ans+m)%j;printf("%d\n",ans+1);}
}

方法三:O(Tmlog⁡(n))O(Tm\log(n))O(Tmlog(n))

我们会发现其实在方法二中ansansans不一定大于jjj,所以没有必要每次做。
我们知道ansansans每次加mmm,而jjj每次加1,问题就转换成:

已知:ans+mans+mans+m,j+1j+1j+1
求:什么时候ans≥jans\ge jans≥j

一个简单的追及问题,t=svt=\frac svt=vs​,即t=j−ansm−1t=\frac {j-ans}{m-1}t=m−1j−ans​,但由于整型向下取整,所以如果不能整除总数还要加一。

code

#include<cstdio>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
int t,n,m;
int main()
{//  fre(mayuri);scanf("%d",&t);for(int i=1;i<=t;i++){scanf("%d%d",&n,&m);int ans=0,k=1,p;while(k<n){p=(k-ans)/(m-1)+((k-ans)%(m-1)!=0);if(k+p>n) p=n-k;ans+=p*m;k+=p;ans%=k;}printf("%d\n",ans+1);}
}

【NOIP2017提高A组集训10.25】嘟嘟噜相关推荐

  1. JZOJ 5421. 【NOIP2017提高A组集训10.25】嘟嘟噜

    Description 由于众所周知的原因, 冈部一直欠真由理一串香蕉. 为了封上真由理的嘴, 冈部承诺只要真由理回答出这个问题, 就给她买一车的香蕉: 一开始有n 个人围成一个圈, 从1 开始顺时针 ...

  2. JZOJ 5426. 【NOIP2017提高A组集训10.25】摘Galo

    Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Gal ...

  3. JZOJ 5425. 【NOIP2017提高A组集训10.25】数论

    Description 聪明的0v0正在学习莫比乌斯反演. 她看到了这样的一道题:有n*m个人站成了一个n*m的方阵-- 剩下的题面,聪明的0v0不记得了.但是,她通过自己高超的数论技巧,给出了一个转 ...

  4. JZOJ 5422. 【NOIP2017提高A组集训10.25】天才绅士少女助手克里斯蒂娜

    Description Input 第一行两个整数n;m 表示电子个数和询问个数. 接下来n 行, 每行两个整数x; y 表示vi. 接下来m 行, 每行形如1 p x y 或2 l r, 分别表示两 ...

  5. 5424. 【NOIP2017提高A组集训10.25】凤凰院凶真

    这是一道DP题,然后做的时候发现,DP式子死活推不出来. 题目大意(本人实在是不想复制了呵-- 给出A,B序列 找出他们的最长公共严格递增子序列 明确,这是一道DP 所以设状态fi,jf_{i,j}f ...

  6. JZOJ5424. 【NOIP2017提高A组集训10.25】凤凰院凶真

    题解 题目的意思是求两个序列的最长公共上升子序列. 就此可以联想到求两个序列的最长公共子序列: 设fi,jf_{i,j}表示a序列处理到i,b序列处理j的最长公共子序列, 转移很简单. 现在要满足公共 ...

  7. 【NOIP2017提高A组集训10.25】摘Galo (树形dp)

    Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Gal ...

  8. 【JZOJ 5426】【NOIP2017提高A组集训10.25】摘Galo

    Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Gal ...

  9. JZOJ5426. 【NOIP2017提高A组集训10.25】摘Galo

    Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Gal ...

  10. JZOJ5422. 【NOIP2017提高A组集训10.25】天才绅士少女助手克里斯蒂娜

    题解 viv_i是一个向量, 那么需要求的就是叉积的平方和. 假设v1=(x1,y1),v2=(x2,y2)v_1=(x_1,y_1),v_2=(x_2,y_2) 那么v1∗v2=x1∗y2−x2∗y ...

最新文章

  1. mysql 创建和删除库_Mysql创建和删除数据库
  2. 我应该避免在Java Swing中使用set(Preferred | Maximum | Minimum)Size方法吗?
  3. python 仪表盘-python仪表盘
  4. opencv图像边界的填充
  5. 可能是目前轻量级弹幕控件中功能最强大的一款
  6. Jenkins构建 netcore5.0 项目时出现NU3028/NU3037错误的解决方案
  7. JSLint检测Javascript语法规范
  8. 流行趋势-立体感和艺术剪纸风海报美妆设计
  9. javascript window.navigator
  10. 朗读评价语言集锦_运用朗读评价语
  11. 《近世代数》课程感想
  12. 零基础【绘画板绘】SAI仿水墨笔刷教程(干货)
  13. 基于Levy飞行策略的改进樽海鞘群算法-附代码
  14. 汇编语言浮点数指令集
  15. 【华为OD机试 2023最新 】 查找充电设备组合(C++ 100%)
  16. 美国计算机科学专业申请条件,美国CS计算机科学专业申请条件
  17. 新监管新纪元 大浪淘沙始见金——“9·4”政策回顾·行业前瞻
  18. webmail lite php,WebMail Lite - 从Gmail,Yahoo,Outlook和其他管理和下载邮件
  19. 房价 APP - 房地产数据查询, 房产投资参考,国家统计局房地产数据
  20. VR线上智能园区3D可视化电子沙盘工厂大数据平台

热门文章

  1. android7.1以太网动态ip,可以这样解决win10/8.1/7中的WIFI或以太网”没有有效的ip配置”问题 | MOS86...
  2. java中怎么审阅图片_java – Crucible REST API:无法添加审阅者
  3. Fisheye-Crucible2.4.3安装破解
  4. linux脚本年龄计算,js+html实现周岁年龄计算器
  5. Android使用marked.js渲染markdown文档
  6. asp.net 打印html文件,关于ASP.NET页面打印技术的常用方法总结
  7. php情书之笛卡尔的情书,笛卡尔情书的秘密——心形函数的作图
  8. 增量式编码器与螺旋微动机构的数显电路
  9. 如何搭建内测托管平台?有可以直接用的内测托管平台吗?
  10. office安装下载