HDU 1443 Joseph 约瑟夫环 暴力

joseph约瑟夫环 m个人围成一圈,从第1个人开始报数,报到n的人出圈,再由下一个人开始报数,报到n的人出圈,如此下去,直到所有的人出圈为止。编写程序依次输出出圈人的编号。 立即下载
题意:有k个好人在队伍前面,k个坏人在队伍后面。每次去掉一个在第m个位置的人,问使所有坏人都比好人先去掉的最小的m是多少?
思路:因为k比较小,直接模拟这个过程。要注意一个情况,每次找第 m 个数的要找在现在这种情况的第m0个数。假设已经找到 cnt 个数,则 m0=(m−1)%(2∗k−cnt)+1 。 m 和m0是等价的, m0 比 m 在很多情况下小很多。用m可能就超时了。

http://acm.hdu.edu.cn/showproblem.php?pid=1443

/*********************************************
    Problem : HDU 1443
    Author  : NMfloat
    InkTime (c) NM . All Rights Reserved .
********************************************/

#include <map>
#include <set>
#include <queue>
#include <stack>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>

#define rep(i,a,b)  for(int i = (a) ; i <= (b) ; i ++)
#define rrep(i,a,b) for(int i = (b) ; i >= (a) ; i --)
#define repE(p,u) for(Edge * p = G[u].first ; p ; p = p -> next)
#define cls(a,x)   memset(a,x,sizeof(a))
#define eps 1e-8

using namespace std;

const int MOD = 1e9+7;
const int INF = 0x3f3f3f3f;
const int MAXN = 1e5+5;
const int MAXE = 2e5+5;

typedef long long LL;
typedef unsigned long long ULL;

int T,n,m,k;

int fx[] = {0,1,-1,0,0};
int fy[] = {0,0,0,-1,1};

int vis[30];
int ans[14];

void init() {
    rep(i,1,13) {
        rep(j,i+1,INF) {
            cls(vis,0);
            int pos = (j - 1 ) % (2 * i) + 1;
            if(pos <= i) continue;
            vis[pos] = 1;
            int cnt = 1;//被删除的个数;
            int flag = 0;
            while(cnt < i) {
                int limit = (j - 1) % ( 2 * i - cnt ) + 1;
                rep(ia,1,limit) {
                    ++pos;
                    pos = (pos - 1) % (2 * i) + 1;
                    while(vis[pos]) {
                        ++ pos;
                        pos = (pos - 1) % (2 * i) + 1;
                    } 
                }
                if(pos <= i) {flag = 1 ; break;}
                vis[pos] = 1;
                cnt ++;
            }
            if(flag) continue ;
            else {
                ans[i] = j;
                //printf("%d %d\n",i,ans[i]);
                break;
            }
        }
    }
}

void input() {

}

void solve() {
    printf("%d\n",ans[n]);
}

int main(void) {
    //freopen("a.in","r",stdin);
    init();
    while(scanf("%d",&n),n) {
        input();
        solve();
    }
    return 0;
}
约瑟夫环改进问题,K个好人与K个坏人,好人出局之前坏人需全部出局 在原始的约瑟夫环的要求下增加一限制:一共有n个人组成环(n=2∗k),前k个是好人,后k个是坏人,即编号1~k是好人,k+1~2k是坏人。要求在第一个好人出局之前,所有的坏人都已经出局。 立即下载

相关推荐

java算法——约瑟夫问题

约瑟夫问题 * 在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中, * 39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人 * 排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再 * 由下一个重新报数,直到所有人都自杀身亡为止。他将朋友与自己安排在第16 * 个与第31个位置,于是逃过了这场死亡游戏。

hdu 1443 Joseph (约瑟夫环)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1443 题意:给出k,2*k个人围成一个环,前k个人是好人,后k个人是坏人,现在我们需要每隔m个人把坏人挑出来,但是条件是最后一个坏人挑出来前不能有好人被挑出来。。问最小的m是多少。(从第一个开始数) 分析:约瑟夫问题的变形,暴力枚举+打表,先暴力求出所有情况的结果,用数组保存起来打表,否则会tl,

常胜将军的博客 567

约瑟夫问题的java实现

约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”)

hdu 1443 Joseph(约瑟夫环+枚举)

Joseph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1811    Accepted Submission(s): 1113 Problem Description The Joseph's problem is

llin-黎辰 767

HDOJ 1443 约瑟夫环的最新应用分析详解

本篇文章是对HDOJ 1443 约瑟夫环的最新应用进行了详细的分析介绍,需要的朋友参考下

unity 在透明物体上投射阴影

unity版本:2019.4.16 创建一个shader,代码如下: Shader "ChuckLee/ARShadow" { Properties { _ShadowColor("Shadow Color", Color) = (0.1, 0.1, 0.1, 0.53) } SubShader { Tags{ "RenderType" = "Transparent" "Queue" = "Geometry+1" } Blend SrcAlpha OneMinusSrcAlph

Abel02的博客 2953

hdu 1443 Joseph (约瑟夫环问题)

Problem DescriptionThe Joseph's problem is notoriously known. For those who are not familiar with the original problem: from among n people, numbered 1, 2, . . ., n, standing in circle every mth is go...

llew的博客 1297

Voronoi算法构建多晶

孪晶多晶 采用孪晶的原子链作为种子通过voronoi算法可以得到孪晶多晶结构。 孪晶种子: txt文件不需要特殊设置 box 150 150 150 random 8 得到孪晶多晶: 通过改变孪晶种子的长度可以得到不同孪晶片层厚度的多晶。 准二维柱晶 所有晶粒在某一维度的晶向一致,晶粒仅在平面内具有旋转关系,所有晶界为旋转对称晶界,这种结构的多晶其位错滑移在某些方向受限,但是能极大的提高晶粒...

yamatachi的博客 5279

HDU1443——约瑟夫问题

有n个人,编号为 1,2,⋯,n站在一个圆圈中,每隔m 个人就杀一个人,最后仅剩下一个人。约瑟夫很聪明,可以选择最后一个人的位置,从而挽救他的生命。例如,当n=6 且m=5时,按顺序出列的人员是 5,4,6,2,3,1,那么1会活下来。假设在圈子里前面怡好有 k 个好人,后面恰好有 k 个坏人,则必须确定所有坏人都在第一个好人前面被杀的最小m。输人格式:输入文件中包含若干行,每行一个k,最后一行为 0,可以假设0

2201_75496602的博客 1110

Python爬虫实战:从巨潮网批量抓取上市公司年报JSON数据

网络爬虫作为自动化数据采集的核心技术,其原理是通过模拟浏览器行为向服务器发送HTTP请求并解析响应,从而高效获取结构化信息。在金融数据分析领域,这项技术价值尤为突出,能够将研究人员从繁琐的手工数据收集中解放出来,聚焦于更高阶的模型构建与价值挖掘。典型的应用场景包括上市公司财务研究、市场趋势分析和风险预警系统开发。本文以Python的requests库为核心工具,详细解析如何通过分析巨潮资讯网的JSON数据接口,构建一个稳定、高效的上市公司年报数据采集管道,并重点探讨了接口逆向、分页爬取、PDF文件下载等关键

weixin_42529366的博客 1232

【AUTOSAR-DEM】-2.1-APP SWC设置UDS/OBD DTC检出和恢复

点击返回「《Autosar_BSW高阶配置》总目录」 案例背景(共6页精讲): DEM模块提供两种不同类型的Event: • BSW-related events:DEM_EVENT_KIND_BSW(通过C-API报告 - Dem_SetEventStatus) • SW-C-related events:DEM_EVENT_KIND_SWC(通过RTE operation - SetEventStatus) 下面我们讲讲在APP SWC中设置BusOff(总线关闭) DTC故障成立/恢复(其它

「汽车电子助手」的博客 3943

OJ【1197】 约瑟夫问题

OJ【1197】 约瑟夫问题

ACMer' 1106

5.6华为OD机试真题 新系统 - 匹配命令行前缀关键字 (Java/Py/C/C++/Js/Go)

5.6华为OD机试真题 新系统 - 匹配命令行前缀关键字本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 2126

poj 1012 & hdu 1443 Joseph(约瑟夫环变形)

poj 1012 & hdu 1443 Joseph(约瑟夫环变形)

2156

C#上位机实战:Modbus RTU串口通信(CRC校验+超时重发完整实现)

在工业自动化上位机开发中,Modbus RTU是串口通信的事实标准协议,SerialPort是 .NET 平台操作串口的原生类,无需依赖第三方库即可实现基础通信。实际项目中,工控现场存在电磁干扰、串口丢包、设备响应延迟等问题,CRC 数据校验用于保证报文完整性,超时重发机制用于提升通信稳定性。本文从零封装一套可直接落地的 Modbus RTU 通信组件,包含完整的校验算法、超时控制、重发逻辑,并配套 WinForm 演示界面。本文基于 C# 原生SerialPort类,实现了一套生产可用。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 384

isaaclab无法识别NVIDIA显卡,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!    📌 特别说明: 文中部分技术问题来源于真实生产环境及网络公开案例,均经过精挑细选与系统化整理,并结合多位一线资深架构师和工程师多年实战经验沉淀,提

**My Coding Family** 1145

HDU-1443 Joseph

题目链接:http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=2&amp;sectionid=2&amp;problemid=2大意:约瑟夫环问题;给出k,一共有n=k*2个人,其中前k个是好人(the first k),后k个坏人。题目要求在选完k个坏人之前不能选到好人,即选的前k个都是坏人,问最小的报数m是多少。思路:一看题目...

临地的博客 286

【2026年华为暑期实习(AI)-6月3日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

本文摘要: 本文探讨了深度学习与计算机科学中的多个关键概念和技术,包括CUDA双缓冲技术、神经网络训练问题、优化算法、概率模型、Transformer架构特性、量化技术、损失函数选择等。通过20道选择题和多项选择题,涵盖了梯度消失/爆炸、神经元死亡、牛顿迭代法、朴素贝叶斯分类、Adam优化器、KV Cache压缩等核心知识点。特别关注了大模型训练中的计算效率、数值稳定性问题,以及实际应用场景如客服Agent的记忆机制优化。题目设计既考察基础理论(如概率分布、指数分布特性),又结合前沿技术(如MoE架构、注意

m0_73659489的博客 81

hdu 1443 Joseph+暴力打表

题目大意:k个好人,k个坏人,确定n,利用Joseph方法删除所有坏人. 由于数据规模,可以利用暴力打表,以后能打表就尽量打表。 这题原本模拟数据时间完全够的,但是测试数据有很多重复的,导致很多人超时,暗坑!!!! 以后要注意点这种情况。 打表: #include<stdio.h> int main(){ int n,a[14]={0,2,7,5,30,16...

weixin_33985679的博客 168

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

hdu 1443 Joseph

数据很小,暴力枚举打表 水题 #include #include using namespace std; int k,a[30],ans[15]; int main() { for(int i=1;i<14;i++) { int m=1; memset(a,0,sizeof(a)); int n=2*i; f

Jeromiewn的博客 414

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

HDU1443 && POJ1012:Joseph

Problem Description The Joseph's problem is notoriously known. For those who are not familiar with the original problem: from among n people, numbered 1, 2, . . ., n, standing in circle every mth is

ACM!荣耀之路! 2106

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

HDU1443_Joseph_约瑟环

题目大意: 有k个好人跟k个坏人按顺序坐着,然后按第m个杀人,求出把坏人全部先杀光的m的最小值。 0<k<14。典型的约瑟环问题。 解题思路: 一开始看见数据量那么小,还以为暴力一定可以出来,结果,好吧,当k为0以上时,时间大得惊人,自己暴力的方法还是有很大问题啊。 比较标准的做法是:在这么多个人中,始终用start跟end来确定好人那个序列的位置。 比如一开始是1 2 ...

weixin_30278311的博客 124

poj 1012 & hdu 1443 Joseph(约瑟夫环变形)

题目链接: POJ 1012:http://poj.org/problem?id=1012 HDU 1443:http://acm.hdu.edu.cn/showproblem.php?pid=1443 约瑟夫环(百度百科):http://baike.baidu.com/view/717633.htm?fr=aladdin Description ...

weixin_30607659的博客 134

POJ 1012 && HDU 1443 Joseph(约瑟夫问题)

Description Input Output Sample Input 3 4 0 Sample Output 5 30 Solution Code

ZSQ 848

hduACMsteps

1.Fibonacci 题意:输出第n项斐波那契数列的前4位,不足全部输出。(1<=n<=1e8) 思路: #include<bits/stdc++.h> #include<math.h> using namespace std; int f[30]; void iint() { int i; f[0]=0,f[1]=1,f[2]=1; for(i=3;i<=20;i++) f[i]=f[i-1]+f[i-2]; } int

qq_45900709的博客 145

hdu1443 Joseph(约瑟夫环)

问题:有2k个人,前k个是好人,后k个是坏人,要求最小的m,使得k个坏人在好人之前。 思路: 约瑟夫环递归式为F(n,k)=(F(n-1,k) + k) mod n。其中F(n,k)表示n个人,每一次从当前数k个,让这个人出局后最后出局的人的标号。 首先确定在k+1个人时,即前k个是好人,1个坏人时,出局的人标号为k。然后根据递归式得到2k个人时,经过k轮后,每轮出局的人都是坏人。 具体代...

多看多听多总结 614
上一篇: HDU 1573 X问题 数论
下一篇: HDU 1271 整数对 数学题
_NMfloat_
博客等级 码龄12年 7粉丝 315原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值