杀人游戏

题目链接:

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

题目描述:

现在已知有N个土匪站在一排,每个土匪都有一个编号,从1到N,每次杀人时给定一个K值,从还活着的土匪中,编号从小到大的找到K个人,然后杀掉,继续往下,直到找遍,然后继续从剩下的土匪中,编号从小到大找到第K个活着的土匪,然后杀掉。比如,现在有10个土匪,K为3,第一次杀掉3,6,9号的土匪,第二次杀掉4,8号土匪,第三次杀掉5号土匪,第四次杀掉7号土匪,第五次杀掉10号土匪,我们看到10号土匪是最后一个被杀掉的(从1到K-1的土匪运气好,不会被杀!)。现在给定你一个N和一个K,问你最后一个被杀掉的土匪的编号是多少。

解题思路:

其实这是一道比较典型的约瑟夫环的问题

http://baike.baidu.com/link?url=RnHDh0kg0uEeh-H_a4ZRMI1d3pZ1qbJYpwLdcY3VvZ8LwLxsVNmGODmIilRKhgBnmI3phVO_lLOavxcQgALT1_

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后[1]  结果+1即为原问题的解。

约瑟夫环运作如下:
1、一群人围在一起坐成[2]  环状(如:N)
2、从某个编号开始报数(如:K)
3、数到某个数(如:M)的时候,此人出列,下一个人重新报数
4、一直循环,直到所有人出列[3]  ,约瑟夫环结束

不过当年萌新的我是不知道这么个东西的 ,但是差不多想明白了其规律性,假设m个土匪,那么第一轮死亡的人编号为k的倍数,第二轮死亡的依次是k+1,2K+2,3K+3……

(m-1)/(k-1)为该周期m前面死亡的人数,即m之前所对应的差值

#include<stdio.h>
int kill(int n,int k)    //杀人游戏
{if(n==k)            //如相等,则最后一个人死亡 return k;            int m;               m=kill(n-n/k,k);    //杀人游戏递归 m为最后编号 //printf("%d\n",m);return (m-1)/(k-1)+m;   //找到m后还原上轮m编号 /*m-1为当前轮m前面的人,因为上轮已经死人了,所以是k-1 (m-1)/(k-1)为该周期m前面死亡的人数,即m之前所对应的差值*/
}
int main()
{int t,x;int n,k;           //n为剩余人数,k为周期数 scanf("%d",&t);while(t--){scanf("%d%d",&n,&k);x=kill(n,k);printf("%d\n",x);}return 0;
}

正所谓“这道题我不会,但是AC还是没问题的~”

蚂蚁感冒

某年蓝桥杯省赛题目http://lx.lanqiao.cn/problem.page?gpid=T119

题目描述:长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。 这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。
【数据格式】
第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。
接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了。
要求输出1个整数,表示最后感冒蚂蚁的数目。

很遗憾当年比赛时没有做出这道题,直到后来听到了一句话才恍然大悟。

“相遇即是擦肩而过”

如果我们总是想着蚂蚁碰头后往回走,那么他们整体的轨迹将变得杂乱无章,确实很难理清头绪

然而,当蚂蚁碰面时,两个蚂蚁都已经被传染感冒了,他们是完全等价的。我们可以认为他们只是擦肩而过。

这样看来,每只蚂蚁只是从一个起点朝一个方向走到头而已

那么被传染感冒的,就是和蚂蚁同方向且在蚂蚁后面的以及和蚂蚁异方面且在蚂蚁前面的蚂蚁~

/*相遇即是擦肩而过*/
#include<stdio.h>
#include<stdlib.h>
int a[1000];
void qp(int n)
{int i,j,t;for(i=1;i<n;i++)for(j=1;j<=n-i;j++)if(abs(a[j])>abs(a[j+1])){t=a[j];a[j]=a[j+1];a[j+1]=t;}
/*  for(i=1;i<=n;i++)printf("%d ",a[i]);printf("\n");
*/
}
int main()
{int i,n,p,k;while(~scanf("%d",&n)){for(i=1;i<=n;i++)scanf("%d",&a[i]);p=a[1];qp(n);for(i=1;i<=n;i++)if(a[i]==p)k=i;int sum=1;for(i=1;i<k;i++)if(a[i]>0)sum++;for(i=k+1;i<=n;i++)if(a[i]<0)sum++;printf("%d\n",sum);}return 0;
}

有意思的逻辑思维题(三)(hdu2211,蓝桥杯蚂蚁感冒)相关推荐

  1. [蓝桥杯] 蚂蚁感冒

    [蓝桥杯] 蚂蚁感冒 峰值内存消耗 < 256M CPU消耗  < 1000ms [题目描述 - Problem Description] 长100厘米的细长直杆子上有n只蚂蚁.它们的头有 ...

  2. 蓝桥杯.蚂蚁感冒(模拟)

    Question: Solve: 当想不到办法的时候,暴力模拟就是最好的办法~ 既然是要走杆,那就一步一步走,一步一步的判断,等蚂蚁全部出界之后再统计一下有多少感染就行,这个思路非常平易近人 接下来明 ...

  3. 蓝桥杯 蚂蚁感冒 不要模拟!

    蚂蚁感冒 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/ ...

  4. java 蓝桥杯 蚂蚁感冒

    问题描述 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂 ...

  5. 蓝桥杯 蚂蚁感冒(Java)

    解题思路:根据第一个感冒蚂蚁的行驶方向,分为两种情况(向左,右),如果他朝右走,则在他右边有朝左走的蚂蚁必然都会被传染(如果右边没有向左的蚂蚁,则不会有蚂蚁被传染,直接输出结果),此时在它右边的不必再 ...

  6. 【每日一题2019-11-14】-蓝桥杯 prev37 分巧克力

    [每日一题2019-11-14]-蓝桥杯 prev37 分巧克力 文章目录 [每日一题2019-11-14]-蓝桥杯 prev37 分巧克力 1.问题描述 2.输入格式 3.样例输入 4.样例输出 5 ...

  7. java dfs算法蓝桥杯题_【蓝桥杯省赛JavaB组真题详解】四平方和(2016)_疼疼蛇的博客-CSDN博客...

    原文作者:疼疼蛇 原文标题:[蓝桥杯省赛JavaB组真题详解]四平方和(2016) 发布时间:2021-02-26 15:00:01 题目描述 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数 ...

  8. 有意思的逻辑思维题(一)(hdu2018,2160,2053)

    母猪的故事 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2018 题目描述: 有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始,每年年 ...

  9. 【蓝桥杯历年题】2020蓝桥杯第十一届A组省赛第一场(7.5)【含Acwing提交地址】

    文章目录 6-10题Acwing均有提交地址 第一题:跑步训练(模拟) 答案:3880 第二题:合并检测(数学,均值不等式) 答案:10 第三题:分配口罩(搜索,dfs) 答案:2400 第四题:矩阵 ...

最新文章

  1. 怎样用vc 做一个c语言,大佬们,小菜鸟想问一问用vc编译器做简易画图软件
  2. 找不到 快速启动 ,怎么办
  3. getElementById()方法取值
  4. 小米11终于来了,12月28日见!
  5. mybatis-plus+springboot+vue+element-ui实现分页
  6. 汇编语言程序设计技巧详解(附例题)
  7. 20210327“泰迪杯数据挖掘大赛”csv模块使用记录
  8. Ricequant米筐金工——因子分析
  9. mic in和line in
  10. WPF 视觉树和逻辑树区别,以及其子节点的遍历过程。
  11. ASP页面模板对象[彭国辉]
  12. 手把手教你搭建SSM框架,简单有效理解SSM框架
  13. 如何求一个关系模式的候选码
  14. Redis Desktop Manager连接失败/超时?
  15. java类似金山打字的键盘模拟_java实现 swing模仿金山打字 案例源码
  16. Gingko Framework:log的使用
  17. 我的数据分析学习路径设计
  18. 中国期货公司排行及相关上市公司
  19. matlab的GUI设计
  20. crontab 问号_Linux 命令 crontab 使用疑问

热门文章

  1. inotifypropertychanged接受不执行_scp客户端现多个漏洞,可执行恶意脚本
  2. python绘制动态心形_python绘制动态爱心
  3. centos boot dvd版本_iPad版Photoshop来了,设计师可以躺着改稿了!!!
  4. 服务器安装三节点RabbitMQ集群(3)
  5. Flink java.lang.NoClassDefFoundError: org/apache/flink/api/common/functions/FlatMapFunction
  6. AMD、CMD、CommonJs、ES6的对比
  7. [Unity] 战斗系统学习 4:FlowCanvas 中的 LatentActionNode
  8. unity 动态生成类_Houdini城市道路模型生成
  9. 多合一图床源码 - QQ图床/搜狗图床/头条图床
  10. 友源社区APP论坛源码+网站源码