落球问题

news/2024/7/5 19:19:03

  这不是一道什么竞赛题目,就是刘汝佳老师在算法竞赛入门经典中给的关于二叉树的例子。自己写了一下,附到博客园上面来供自己回忆;

第一种解法是设了一个ok判断球是往左还是往右,但是要开一个2^20的数组,用来记录每个位置的0/1开关情况。这个代码很简单,在书的100页有详细的讲解。

View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 #define max 20
 4 int str[1<<max];
 5 int ok;
 6 int main()
 7 {
 8     int a,b;
 9     while(scanf("%d%d",&a,&b) == 2)
10     {
11         memset(str,0,sizeof(str));
12         int k=0,n;
13         n=(1<<a)-1;
14         for(;k<b;k++)
15         {
16             ok=1;
17             for(;;)
18             {
19                 str[ok] = !str[ok];
20                 ok=str[ok]?2*ok:2*ok+1;
21                 if(ok>n) break;
22             }
23         }
24         printf("%d\n",ok/2);
25     }
26     return 0;
27 }


然后看刘老师讲了一种优化解法:利用那个数字的奇偶性来判断在第几个节点落在跟的左子树里。从而判断位置,不太好说,自己得好好想想。

View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     int line,ball;
 6     int ok,i,j;
 7     while(scanf("%d%d",&line,&ball) == 2)
 8     {    
 9         ok=1;
10         for(i=0;i<line-1;i++)
11         {
12             if(ball%2)
13             {
14                 ok=2*ok;
15                 ball=(ball+1)/2;
16             }
17             else
18             {
19                 ok=2*ok+1;
20                 ball/=2;
21             }
22         }
23         printf("%d",ok);
24     }
25 }

 

转载于:https://www.cnblogs.com/gongcomeon/archive/2012/04/18/2456110.html


http://www.niftyadmin.cn/n/2606777.html

相关文章

FRIDA 实用手册

FRIDA 实用手册本文目的是作为工具类文章&#xff0c;收集整理了一些 FRIDA 的使用技巧和用例&#xff0c;方便同学们在开发使用过程中开袋即食。 frida 的基础教程可以直接参看官网说明。 Python 部分JS 中文支持使用 codecs.open(scriptpath, "r", "utf-8&quo…

hdu2199 二分搜索

这是很简单的二分搜索&#xff1b;需要注意的是精度。一开始我用的是right-left<1e-4,测试样例中100我输出的最后一位为1&#xff0c;不合要求。 后来自己写了个四舍五入的一段&#xff0c;但交上去WA&#xff0c;于是改成1e-6&#xff0c;AC了。 代码题目如下&#xff1a; …

实用的设计模式1——单例模式

在软件工程中&#xff0c;设计模式&#xff08; design pattern &#xff09;是对软件设计中普遍存在&#xff08;反复出现&#xff09;的各种问题&#xff0c;所提出的解决方案。 看维基上对设计模式的定义&#xff0c;你就知道设计模式的重要性&#xff0c;但是往往编程中设计…

一条502报警引发的胡思乱想

安心倒计时 忙完了今天的工作, 终于到了周五,可以好好休息下了。 睡梦惊醒 就在安心养神的时候, 同事转给了我一条nginx 502的报警, 赶紧去线上一顿排查。 首先得先找出哪台机器报出的(同时喊运维看下线上负载情况), 发现01机器的nginx日志在报警时间点的错误信息: *272881176 …

工作一年了的心得体会

工作至今有一年的时间了&#xff0c;这一年有过开心&#xff0c;也有失落。但是回首看看&#xff0c;似乎更多的是迷茫。 刚来公司的时候&#xff0c;打心底想好好学一学技术&#xff0c;学一点有用的东西。但是进公司之后发现很多和自己想的不太一样。来到了一个做监控平台的组…

Zookeeper学习(一) 概述

0. 前言 前段时间在工作中参与了一个分布式项目的开发&#xff0c;其中一个重要的模块就是Zookeeper。可以说这个项目及其之后的一段学习让我找到了自己的兴趣点&#xff0c;自己最近也学习了一些Zookeeper的知识&#xff0c;在这里也把自己学到的和一些思考写下来~ 1. 分布式协…

[转]React Native 语言基础之ES6

React Native 是基于 React 这个前端框架来构建native app的架构。React Native基于ES6&#xff08;即ECMAScript2015&#xff09;语言进行开发的。 JS的组成 1) 核心&#xff08;ECMAScript&#xff09;&#xff1a;描述了该语言的语法和基本对象。担当的是一个翻译的角色&am…

canvas 实现vue 手势解锁组件

1.手机锁屏九宫格解锁组件 2.代码如下 <template><canvas id"gesture" ref"canvas" :style"style" /></template><script>export default {name: GestureLock,props: {chooseType: {type: Number,default: 3 // 3: 3*3,…