zoukankan      html  css  js  c++  java
  • NYIST OJ解题笔记(第1版选录)

    最近把NYIST OJ( http://acm.nyist.net )第一版的题做完了,整理一下。由于有些题去年已经做掉了所以就没有再做,因此并没有包含1-100的所有题。
    本笔记部分参考《南阳理工学院OJ第1版解题报告V1.0》。文中涉及题目源码 http://code.google.com/p/algorithm-mdyang/ /nyist下
    不够明白的 待做的
    以下讲解不够详细之处请参照源码
    3:面积用三角划分计算,重心根据各三角形的重心和用面积加权求得
    5:暴力匹配,或使用string.h的find()函数(或std::string::find()),或将二进制串转化成整数比较,或任何其他串匹配算法(KMP,rabin-karp)
    10:DP,记录每坐标点作为线路终点时当前线路长度,初始每坐标点长度置1,状态转换方程f(x,y)=max{f(x,y),{(x,y)的邻接点中比(x,y)地势高的邻接点的长度值+1}},迭代至收敛,遍历,输出所有点中最大长度。可使用滚动数组节省空间
    20:BFS(DFS需注意剪枝避免TLE)
    21:BFS(以三个杯子的水容量为状态,以一次倒水为状态转换)
    23:归纳可得N%(M+1)?"Win":"Lose"
    25:题目似乎有问题,考虑following 10的时候报错,不考虑就对了
    26:规模不大,可打表做(如规模太大用rabin-miller判素)
    30:枚举最后一个到达的湖,对于每种情况先扣除所有旅程时间,在剩下的时间中每次选取鱼最多的湖钓鱼
    32:递归
    35:数据结构经典题
    37:最少添加数=strlen(s)-lcs(s,reverse(s))
    38:最小生成树,Prim/Kruskal
    42:无向图Euler路径存在性判定
    43:递归(《编程之美》1.16“24点游戏”)
    44:从第一个变量开始持续加和,每次加和完后更新最大子串和,若遇当前子串和为负则从下元素开始重新计算
    45:大整数乘法
    46:log(n)乘法:n为奇数时a^n=a*a^(n-1),偶数时a^n=(a^(n/2))^2
    49:0-1背包问题,DP求解
    52:找循环,注意n最大可取99999,因此int32表示n^2不够用(最大4e9),需int64
    这题的测试程序只找0字循环,一开始写了可找6字形循环的WA了,给一个6字循环的例子(n=2,k=2):
    2 4 8 16 32 64 28 56 12 24 48 96 92 84 68 36 72 44 88 76 52 4
      ^<--------------------------20----------------------------|
    但如果是找0字循环的话,因为永远都不会回到2,所以应该输出-1. 0字循环则简单得多,最多找10^k次即可(因为最后k位取值最多10^k种,因此如果存在0字循环,则最长循环的长度为n,n^2...n^k,即k)
    55:每次取最小的两堆合并
    59:先检查是否为无解输入,固定第一人在第一位置一路向左(或者一路向右,无所谓)安排座位,计算安排后的新位置每个人与原位置的差值i,统计每个i值的出现次数,计最大次数为m,则该排位方案需移动c=n-m人,计算所有排位方案的c值,输出最小c值
    61:多维DP http://blog.csdn.net/epiker/article/details/7482875 网络流 http://acm.nyist.net/JudgeOnline/articles/?p=48 
    66:k=x*y/(y+x)且x,y,k均为整数,令y<=x<=k*(k+1)
    67:向量公式或海伦公式均可
    71:尾头(先取尾后取头)贪心
    75:闰年判断

    76:递推公式f(1)=0,f(2)=1,f(3)=2,f(n)=f(n-1)+f(n-2)

    78:点集凸包问题
    79:DP,最长单调递减子序列。其实我觉得这题有问题。根据题设应该是求最长单调非递增子序列,但按此要求做WA,改为单调递减后AC
    80:TBD
    81:DP,按行位压缩表示地形、部署方案,位运算判断部署方案与条件是否冲突,可使用滚动数组节省空间
    82:DFS
    83:线段相交判别。可能线段:从所有可能的边点至宝藏所在点,其中边点是位于迷宫边界上两个相邻墙端点中间的任意一点(可直接取中点)
    84:取决于1..n中因子5的个数,所以为n/5(5,10,15,20,25...的首个因子5的个数)+n/25(25,50,75,100,125...的第2个因子5数)+n/125(125,250,500...的第三个因子5数)+n/5^i(5^i,2*5^i,3*5^i...的第i个因子5数),其中i为使得n>=5^i最大的取值
    86:hash统计
    87:多维DP
    88:f(n+1)=2f(n)+1,S(n)=2^n-1
    89:递归,从最大的碟子开始考虑递归分解
    90:递归分解:f(x)=1+h(x-1,1)+h(x-2,2)+...+h(x-x/2,x/2),其中h(x,y)为对x的分解方案数,这些方案均满足条件:对于每个组成分解的数n,均有n>=y. h(x,y)的递归展开式:h(x,y)=1+h(x-y,y)+h(x-(y+1),y+1)+...+h(x-x/2,x/2)
    91:n<1000000可知仅需考虑至9!=362880,若1!..9!各占一个二进制位,则0~2^9-1代表了所有组合情况(共512种),穷举可能结果后存入表中,直接查表输出结果
    92:沿边缘扫描,遇非0格子BFS置0。一种比较tricky的方法是在最外围加一圈1然后从(0,0)开始BFS
    93:模拟
    94:模拟,保留所有烟屁股,直到所剩烟屁股<k时输出已抽香烟支数
    95:hash统计
    99:将输入看成有向图,顶点是字母,边是单词,边从首字母指向末字母,则单词拼接问题转化为寻找有向图中Euler路径的问题。直接DFS找会TLE,按照连通性判别->欧拉路径/回路存在性判别->DFS寻找最小字母序Euler路径可AC. 启发:对于不一定存在解的题目,可通过解存在性的判定进行搜索剪枝,本体若给定输入不存在解,则必须DFS所有可能才能判定不存在,因此TLE
    100:逐位统计
  • 相关阅读:
    11111 Generalized Matrioshkas
    Uva 442 Matrix Chain Multiplication
    Uva 10815 Andy's First Dictionary
    Uva 537 Artificial Intelligence?
    Uva 340 MasterMind Hints
    SCAU 9508 诸葛给我牌(水泥题)
    Uva 10420 List of Conquests(排序水题)
    Uva 409 Excuses, Excuses!
    10/26
    11/2
  • 原文地址:https://www.cnblogs.com/mdyang/p/2841016.html
Copyright © 2011-2022 走看看