zoukankan      html  css  js  c++  java
  • 《算法竞赛入门经典》(刘汝佳)——数据结构基础

    6.1:栈和队列;6.2:链表,看过跳过,不做记录。

    6.3:二叉树:

    6.3.1:小球下落679 - Dropping Balls

    具体解释不写了,反正书里有。

    //左边 k*2,右边 k*2+1
    #include <stdio.h>
    #include <string.h>
    int open[2<<21];
    int main()
    {
        int n, h, id, ans;
        while(scanf("%d", &n) != EOF)
        {
            if(n == -1) break;
            for(int i = 0; i < n; i++)
            {
                scanf("%d%d", &h, &id);
                memset(open, 0, sizeof(open));
                for(int k = 0; k < id; k++)
                {
                    ans = 1;
                    for(int j = 0; j < h - 1; j++)
                    {
                        open[ans] = (1 + open[ans]) % 2;
                        ans = (open[ans] == 1)? ans*2 : ans*2+1;
                    }
                }
                printf("%d
    ",ans);
            }
        }
        return 0;
    }
    这是超时的代码,最初的模拟思路
    //左边 k*2,右边 k*2+1
    //直接模拟最后一个,当id奇数:id->id/2+1;偶数id->id/2
    #include <stdio.h>
    #include <string.h>
    int main()
    {
    int n, h, id, ans;
    while(scanf("%d", &n) != EOF)
    {
    if(n == -1) break;
    for(int i = 0; i < n; i++)
    {
    scanf("%d%d", &h, &id);
    ans = 1;
    for(int j = 0; j < h - 1; j++)
    {
    ans = (id%2) ? ans*2 : ans*2+1;
    id = (id%2) ? id/2+1 :id/2; 
    }
    printf("%d
    ",ans);
    }
    }
    return 0;
    }
    这是经过改进后的代码,直接根据奇偶性判断第i个小球的落点:
    一道又一道,好高兴!
  • 相关阅读:
    20160421
    20160420笔记
    第一个随笔
    搬家
    OO第十五次作业
    OO第三次博客作业
    OO5-7次作业总结
    从入门到不放弃——OO第一次作业总结
    第八次团队作业——系统设计和任务分配
    第七次作业-团队选题报告和需求规格说明书
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3633284.html
Copyright © 2011-2022 走看看