前置芝士约瑟夫问题

这样大概就是板子问题了

考场的树状数组+二分的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. transformer模型转torchscript格式

    from transformers import BertModel, BertTokenizer, BertConfig import torch enc = BertTokenizer.from_ ...

  2. 序列化-Hessian

    引用官网介绍: Hessian is a dynamically-typed, binary serialization and Web Services protocol designed for ...

  3. [网络编程之客户端/服务器架构,互联网通信协议,TCP协议]

    [网络编程之客户端/服务器架构,互联网通信协议,TCP协议] 引子 网络编程 客户端/服务器架构 互联网通信协议 互联网的本质就是一系列的网络协议 OSI七层协议 tcp/ip五层模型 客户端/服务器 ...

  4. ART-TEMPLATE的核心语法

    模板引擎语法 核心方法 // 基于模板名渲染模板 template(filename, data); // 将模板源代码编译成函数 template.compile(source, options); ...

  5. [刷题] 20 Valid Parentheses

    要求 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效 左括号必须用相同类型的右括号闭合 左括号必须以正确的顺序闭合 空字符串可被认为是有效字符串 思路 遇 ...

  6. BUUCTF(八)[极客大挑战 2019]LoveSQL

    BUUCTF 1.打开题目 注入方法可参考NewsCenter 2.测试注入点 username: 1'or'1=1 password: 1'or'1=1 登录成功,说明存在注入漏洞. 下面测试位点个 ...

  7. Ansible_描述角色结构

    一.利用角色构造ansible playbook 1.What's 角色 1️⃣:Ansible角色提供了一种方法,让用户能以通用的方式更加轻松地重复利用Ansible代码. 我们可以在标准化目录结构 ...

  8. 设置添加SSH-(转自破男孩)

    很多朋友在用github管理项目的时候,都是直接使用https url克隆到本地,当然也有有些人使用 SSH url 克隆到本地.然而,为什么绝大多数人会使用https url克隆呢? 这是因为,使用 ...

  9. 9.8-9 nice & renice

    nice:调整程序运行时的优先级        nice命令是一个当程序启动时,修改程序运行优先级的命令. Linux的优先级范围是从-20(最大优先级)到19(最小优先级).优先级越高的程序占用CP ...

  10. 记一次 .NET 某电商交易平台Web站 CPU爆高分析

    一:背景 1. 讲故事 已经连续写了几篇关于内存暴涨的真实案例,有点麻木了,这篇换个口味,分享一个 CPU爆高 的案例,前段时间有位朋友在 wx 上找到我,说他的一个老项目经常收到 CPU > ...