• NYOJ


    //http://acm.nyist.net/JudgeOnline/problem.php?pid=33
    #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int *a; int row, tmp_row; int num = 1; int i, j; int loc; scanf("%d", &row); i = 0; j = row - 1; tmp_row = row; a = (int *)malloc(row*row*sizeof(int)); memset(a, 0, row*row*sizeof(int)); while (tmp_row) { //蛇向下移动。 while (i < tmp_row) { //判断蛇是否在可用的行内。不符和条件,证明本方向移动结束 loc = i* row + j; if (*(a + loc)) { i--; break; }//判断位置是否已经被蛇占用了,占用,证明本方向移动结束 *(a + loc) = num++; i++;//对行数加一,移动到下一个位置 } if (i >= tmp_row) i--;//如果移动出可用行,返回行内 j--;//因为返回的位置,此位置已经被使用过。通过j--修正到正确的位置,下面同理 while (j >= 0) { loc = i* row + j; if (*(a + loc)) { j++; break; } *(a + loc) = num++; j--; } if (j < 0) j++; i--; while (i >= 0) { loc = i* row + j; if (*(a + loc)) { i++; break; } *(a + loc) = num++; i--; } if (i < 0) i++; j++; while (j <tmp_row) { loc = i* row + j; if (*(a + loc)) { j--; break; } *(a + loc) = num++; j++; } i++; tmp_row--; } loc = 0; for (i = 0; i < row; i++) { for (j = 0; j < row; j++) { printf("%d ", *(a + loc)); loc++; } printf(" "); } return 0; }
    //http://acm.nyist.net/JudgeOnline/problem.php?pid=63
    
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    int visit[1000010];
    
    #define init(arr, value) memset(arr, value, sizeof(arr))
    #define max(a, b) return a > b ? a : b
    
    int main()
    {
        int deep, node, num, i, k; //deep为二叉树的深度
        while (scanf("%d%d", &deep, &num) && deep && num)
        {
            init(visit, 0);
            node = pow((double)2, deep) - 1; //结点个数
            for (int i = 1; i <= num; ++i)
            {
                k = 1;
                while (true)
                {
                    visit[k] = !visit[k];
                    if (visit[k])
                    {
                        k = k * 2; //左孩子
                    }
                    else
                    {
                        k = k * 2 + 1; //右孩子
                    }
                    if (k > node)
                    {
                        break;
                    }
                        
                }
            }
            printf("%d
    ", k / 2); //k为叶子结点的左孩子,所以除2
        }
        return 0;
    }
    //http://acm.nyist.net/JudgeOnline/problem.php?pid=117
    //http://blog.csdn.net/dlengong/article/details/7594919
    
    逆序数的求法~~
  • 相关阅读:
    Java集合HashMap的实现原理(借鉴)
    Heritrix在eclipse中的配置
    Hadoop中涉及到的网络 I/O 优化
    李开复的博士论文人生思考
    Java中HastSet用法
    统计语言模型
    ASP.NET 中的正则表达式
    高ASP.Net应用程序性能的十大方法
    在多线程环境下使用HttpWebRequest或者调用Web Service
    使用TextBoxWatermark为TextBox加上水印效果
  • 原文地址:https://www.cnblogs.com/virusdefender/p/3395090.html
Copyright © 2020-2023  润新知