前置芝士约瑟夫问题

这样大概就是板子问题了

考场的树状数组+二分的60分暴力???

 1 #include<bits/stdc++.h>
2 #define int long long
3 #define MAXN 11000001
4 int c[MAXN];
5 int lowbit(int x){return x&(-x);}int n;
6 void add(int x,int k)
7 {
8 for(int i=x;i<=n;i+=lowbit(i))
9 {
10 c[i]+=k;
11 }
12 }
13 int query(int x)
14 {
15 int ans=0;
16 for(int i=x;i>=1;i-=lowbit(i))ans+=c[i];
17 return ans;
18 }
19 int second_divied(int l,int r,int x,int last_rs)
20 {
21
22 while(l+1<r)
23 {
24 int mid=(l+r)>>1;
25 if(query(mid)-last_rs<x)
26 {
27 l=mid;
28 }
29 else r=mid;
30 //printf("l=%lld r=%lld\n",l,r);
31 }
32 if(query(l)-last_rs==x)return l;
33 else return r;
34 }
35 int find(int pos)
36 {
37 if(query(n)-query(pos)==0)
38 {
39 return 1ll;
40 }
41 return pos;
42 }int ans=0;
43 void work2()
44 {
45 for(int i=1;i<=n;++i)add(i,1);
46 int sum=0;int pos=0;int cir=1;//上一位置
47 while(sum<n-1)
48 {
49 int now_rs=query(n);
50 int last_rs=query(pos);
51 if(now_rs-last_rs>=cir)
52 {
53 pos=second_divied(pos+1,n,cir,last_rs);
54 add(pos,-1);
55 pos=find(pos);
56 }
57 else if(now_rs-last_rs<cir)
58 {
59 int t=query(n);
60 int me=cir;
61 me=(me-(now_rs-last_rs))%t;
62 if(me==0)me=t;
63 pos=second_divied(1,n,me,0);
64 add(pos,-1);
65 pos=find(pos);
66 }
67 cir++;sum++;
68 }
69 ans=second_divied(1,n,1,0);
70 add(ans,-1);
71 }
72 int T=0;
73 signed main()
74 {
75 scanf("%lld",&T);
76 while(T--)
77 {
78 scanf("%lld",&n);
79 ans=0;
80 work2();
81 printf("%lld\n",ans);
82 }
83 }

对于约瑟夫问题

我们可以知道最后的人一定是升到最后的,他在新的队伍里的编号是零(因为只有一个人,从零开始编号)

然后我们从后往前递推,考虑最后胜利者在上一层的编号直到最后编号

我们假设当前层为4,编号为3

那么在上一层时因为干掉了一个人,那么就从干掉的人的后一个开始编号

所以上一层是在位置6

这样我们得到f[i]表示在第i次操作后胜利者所处的编号

然后就简单了

#include<bits/stdc++.h>
#define MAXN 10000001
using namespace std;
int T;int n;int ans=0;
signed main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
ans=0;
for(int i=n-1;i>=1;--i)
{
ans=(ans+i)%(n-i+1);
}
printf("%d\n",ans+1);
}
}

「模拟8.23」one递推,约瑟夫的更多相关文章

  1. 「模拟8.23」阴阳 DP

    对于此题的性质我们考虑DP 分四种情况 黑色块在右侧单调降,单调升 还有在左侧 另外我们这样可能会记重,所以还要将重复记过的也就是边界线是横的和竖的 然后还要将全白全黑加上 1 #include< ...

  2. 「LOJ 538」「LibreOJ NOIP Round #1」数列递推

    description sosusosu 虐爆 OI 之后成为了一名文化课选手.一天,他做作业碰到了一堆数列问题,每道题给出的数列都是以下形式: 给定一个下标从\(0\)开始,无限长的整数列\({a_ ...

  3. [wikioi 1418]铃仙•优昙华院稻叶(东方幻想乡系列模拟赛)(树上递推)

    题目:http://www.wikioi.com/problem/1418/ 分析: 一看就肯定是树上的递推 设f[i][j][k]表示第i秒在k点(从j点走过来的)的概率 则f[i][j][k]=f ...

  4. 【LibreOJ】#538. 「LibreOJ NOIP Round #1」数列递推

    [题意]LibreOJ [算法]乱搞 [题解]容易发现数列最后一定单调,最后单调递增则最大值赋为最后一个,反之最小值赋为最后一个,然后处理一些细节就可以AC,要注意以下几点: 1.数列连续三项以及数列 ...

  5. 「模拟赛20191019」C 推式子+贪心+树状数组

    题目描述 给定一棵\(n\)个点的有根树,根节点编号为\(1\),点有点权. 定义\(d(v)\)表示\(v\)到\(1\)的路径上的边数. 定义\(f(v,u)\)在\(v<u\)且\(v\) ...

  6. 2021升级版微服务教程5—通过IDEA运行多个项目实例「模拟集群」

    2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...

  7. 「模拟赛20190327」 第二题 DP+决策单调性优化

    题目描述 小火车虽然很穷,但是他还是得送礼物给妹子,所以他前往了二次元寻找不需要钱的礼物. 小火车准备玩玩二次元的游戏,游戏当然是在一个二维网格中展开的,网格大小是\(n\times m\)的,某些格 ...

  8. 「模拟赛20180306」回忆树 memory LCA+KMP+AC自动机+树状数组

    题目描述 回忆树是一棵树,树边上有小写字母. 一次回忆是这样的:你想起过往,触及心底--唔,不对,我们要说题目. 这题中我们认为回忆是这样的:给定 \(2\) 个点 \(u,v\) (\(u\) 可能 ...

  9. 「模拟8.29」chinese(性质)·physics·chemistry(概率期望)

    T1  chinese 根据他的问题i*f[i]我们容易联想到,答案其实是每种方案中每个点的贡献为1的加和 我们可以转变问题,每个点在所有方案的贡献 进而其实询问就是1-k的取值,有多少中方案再取个和 ...

随机推荐

  1. 【转】风控中的特征评价指标(二)——PSI

    转自:https://zhuanlan.zhihu.com/p/79682292 风控业务背景 在风控中,稳定性压倒一切.原因在于,一套风控模型正式上线运行后往往需要很久(通常一年以上)才会被替换下线 ...

  2. 免费JS甘特图组件dhtmlxgantt

    安装 参考:https://docs.dhtmlx.com/gantt/desktop__install_with_bower.html 可使用NuGet.Bower.npm包管理器安装(应用在asp ...

  3. char值不能直接用作数组下标

    #include <stdio.h> //用 char 的值作为数组下标(例如,统计字符串中每个字符出现的次数),要考虑到 //char 可能是负数.有的人考虑到了,先强制转型为 unsi ...

  4. 基于pyqt5和openpyxl和Pyinstaller的青年大学习检查未学习人数的脚本

    前几天接到团支书的一个需求,因为学校给的名单是青年大学习已学习的名单,然而要知道未学习的名单只能从所有团员中再排查一次,过程相当麻烦.团支书跟我抱怨后,刚好我也学过一些操作办公软件的基础.打包pyth ...

  5. 使用 MegaCLI 检测磁盘状态并更换磁盘

    专栏首页阿dai_linux使用 MegaCLI 检测磁盘状态并更换磁盘 原 10

  6. 【zombie】如何查看并杀死僵尸进程?

    [zombie]如何查看并杀死僵尸进程? 赏金Micheal关注 2019.03.31 19:40:15字数 1,016阅读 4,373 僵尸进程定义 In UNIX System terminolo ...

  7. U盘PE重装系统导致D、E、F盘消失

    U盘PE重装系统导致D.E.F盘消失 听语音 原创 | 浏览:1251 | 更新:2014-08-18 18:46 | 标签:u盘 重装 解决使用U盘PE重装系统导致的错误问题 工具/原料   制作好 ...

  8. 使用cockpit管理kvm虚拟机

    在Centos8.2主机上部署kvm,使用cockpit管理 首先检测cpu是否支持虚拟化 [root@localhost ~]# cat /proc/cpuinfo | grep vmx flags ...

  9. shell基础之综合练习

    0.脚本一键完成下面所有操作1.准备2台centos7系统的服务器,远程互相免密登录,以下所有题目过程中开启防火墙2.给1号机和2号机使用光盘搭建本地yum源(永久生效)3.给服务器1添加2块硬盘,1 ...

  10. Python中if name == 'main':的作用

    一个python文件通常有两种使用方法, 第一是作为脚本直接执行. 第二是 import 到其它的 python 脚 本中被调用(模块重用)执行. 因此 if name == 'main': 的作用就 ...