前置芝士约瑟夫问题

这样大概就是板子问题了

考场的树状数组+二分的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. opencv——机器视觉检测和计数

    引言 在机器视觉中,有时需要对产品进行检测和计数.其难点无非是对于产品的图像分割. 由于之前网购的维生素片,有时候忘了今天有没有吃过,就想对瓶子里的药片计数...在学习opencv以后,希望实现对于维 ...

  2. 01 CTF MISC 杂项 知识梳理

    1.隐写术( steganograhy ) 将信息隐藏到信息载体,不让计划的接收者之外的人获取信息.近几年来,隐写术领域已经成为了信息安全的焦点.因为每个Web站点都依赖多媒体,如音频.视频和图像.隐 ...

  3. 【转】java-selenium三种等待方式

    方式1: 线程等待:Thread.sleep(xxxx) 只要在case中加入sleep就会强制等待设置的时间后才会执行之后的命令,这种等待一般适用于调试脚本的时候. java代码: //等待3秒 T ...

  4. python3.7[列表] 索引切片

    python3.7[列表] 索引  切片 排序     #### 列表.sort 永久排序   sorted(列表) 临时排序   ### >>> print(sorted(a))[ ...

  5. 【转载】]基于RedHatEnterpriseLinux V7(RHEL7)下SPEC CPU 2006环境搭建以及测试流程 介绍、安装准备、安装、config文件以及运行脚本介绍

    https://www.codetd.com/article/1137423 <版权声明:本文为博主原创文章,未经博主允许不得转载> 本次利用SPECCPU2006测试工具来进行Intel ...

  6. Zabbix 监控系统部署

    Zabbix 监控系统部署 实验环境 Zabbix server:RHEL8 ip:192.168.121.10 一.关闭防火墙和selinux [root@Zabbix-server ~]# sys ...

  7. Java Stream 流(JDK 8 新特性)

    什么是 Steam Java 8 中新增了 Stream(流)来简化集合类的使用,Stream 本质上是个接口,接口中定义了很多对 Stream 对象的操作. 我们知道,Java 中 List 和 S ...

  8. Python对比两个txt文件内容

    difflib模块作为python的标准库模块,无需安装,作用是比对文本之间的差异,且支持输出可读性比较强的html格式.#!coding=utf-8 # 2018-9-19 import sys i ...

  9. 西门子 S7-200 通过以太网通讯模块连接MCGS 通讯

    北京华科远创科技有限研发的远创智控ETH-YC模块,以太网通讯模块型号有MPI-ETH-YC01和PPI-ETH-YC01,适用于西门子S7-200/S7-300/S7-400.SMART S7-20 ...

  10. 『动善时』JMeter基础 — 31、JMeter中BeanShell断言详解

    目录 1.BeanShell简介 2.Beanshell的内置变量和方法 3.BeanShell断言界面详解 4.BeanShell断言的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 ...