• POJ刷题记录


    刷题列表见:http://blog.csdn.net/functionendless/article/details/78196691

    一:初期简单题:

    一. 基础算法(枚举,贪心,模拟)

    1. 1753 Flip Game

    • 题意:
      给你一张4*4的01表,让你进行如下操作:选择一个点,与其四相邻的格子及自己反色.
      目标: 让所有格子都变为0或1. 输出最小步数

    • 题解:
      没有难度的状压DFS,将4*4变为16位2进制然后DFS.

    • 错误:
      1.判断全1时打成(1<<17)-1,没有做到100%了解自己代码的在干什么.

    2. 2965 The Pilots Brothers’ refrigerator

    • 题意:
      给你一张4*4的01表.
      操作:选择一个点,将该点所在的行与列的点全部反色(包括自己).
      目标:让所有格子都变为0 输出最小步数及方案(spj).

    • 题解:
      首先明确:
      性质1:如果一个点被反两次那么等于它没反.
      性质2:操作顺序改变不会影响最终结果.
      性质3:将一个点所在行列全部反色后整张表改变的只有中间那个点.
      那么方法就很明确了,只需把表中为1的点所在行列反色便可,然后由于性质1,我们需要记录每个点被反色次数最后的时候%2即可,统计答案只要统计%2后为1的点即可

    • 错误:
      1.看到这题想都不想一次BFS…然后T了,但理论上这复杂度不是状态数*转移复杂度=2^16*2^4吗..为什么会T. (有了解情况的可以评论,感激不尽)

    3. 1328 Radar Installation

    • 题意:
      在x轴上方有1000个点,你可以在x轴上放覆盖范围为以r为半径的机器,要求用最少的机器覆盖题目给你的点.求最小点数量.

    • 题解:
      首先这是个贪心. 我们先把每个点转换成线段,表示在这个线段内放机器能覆盖到它.
      那么这个问题就变成了经典的区间选点问题.
      我们只需先按线段的终点排序然后记录一个值pos表示当前机器放在pos点,那么如果一个线段的l>pos那么就ans++并更新pos.

    • 错误:
      1.多组数据读入时终止条件为n==0 && r==0,但我在读入时写了while(cin>>n>>r && n && r) 于是GG了.
      2.计算线段时勾股定理的答案用int存了…
      3.当一个标程用G++交的时候T而用C++则A..(原因:C++对cin有一定优化而G++没有)

    4. 2109 Power of Cryptography

    • 题意:
      有算式k^n=p,给你n,p,让你求k. (n<=200 p<=10^101)

    • 题解:
      第一眼看到这题有两个想法,高精爆搞和double水过,那么我抱着侥幸心理写了一发水,然后就过去了…
      double水过: 由于k^n=p ->k=p^(n-1) 然后用pow就OK了
      高精: 二分k,然后高精幂算出当前k^n次,与p比较

    • 错误:
      1.多组数据读入时终止条件为EOF,但我在读入时写了while(scanf(“%lf %lf”,&n,&p)),没有加!=EOF,于是GG了.(没加EOF时貌似终止不了程序)

    5. 2586 Y2K Accounting Bug

    • 题意:(这题意真心难懂…)
      一年12个月,给你s和d,表示如果盈利则赚s元,如果亏损则亏d元.
      每五个月进行一次统计,统计八次(1-5月一次,2-6月一次…….)统计的结果是这八次都是亏空。
      目标:判断全年是否能盈利,如果能则求出最大的盈利。如果不能盈利则输出Deficit
    • 题解: 终于遇到一题比较好想的贪心
      为了满足每五月亏一次并且所有的都要赚,我们要保证每五个月亏的值最低,那么我们就只要枚举xs< yd(x+y=5) 便可以根据每种情况求出最大盈余额,嗯画出来差不多长这样
      4*s < 1*d:ssssdssssdss
      3*s < 2*d:sssddsssddss
      2*s < 3*d:ssdddssdddss
      1*s < 4*d:sddddsddddsd
      注意亏0元算盈利…
    • 错误: 终于1A了

    6: 3295 Tautology

    • 题意:
      给你一个长度100的字符串,包含 K, A, N, C, E, p, q, r, s, t.
      其中小写字母代表bool变量,大写字母代表位运算符.
      K->与,A->或,N->非,C->包含,E->同或.
      问该表达式是否永真.
    • 题解:
      显然就是一道大模拟题…
      首先我们注意到只有5个变量,也就是说只有2^5=32种情况,直接暴枚,然后O(n)扫一遍每种情况.
      那么怎么扫? 很容易发现题目中的字符串是前缀表达式,根据套路要从后往前扫,每遇到一个符号,弹出栈中对应需要的数字然后push进答案,如果有一种情况的答案是false 那就直接return掉了

    • 错误:
      1.第一次从前往后扫了,然后被discuss里的数据×掉了

    7. 1086 Unscrambling Images

    *:此题不在列表上,纯属智障做错题…
    - 题意: (这题真是道语文题…)
    背景是一个四叉树转正方形的表示方法,四叉树中只有叶子节点有权值且每个节点的度数非0即4.
    我们考虑一个非叶子节点,其4个孩子所占的空间分别为其父亲的左上,左下,右上,右下四个象限(区块),并且第几个孩子占哪块是题目给的,该性质也是递归的
    题目会给我们一个四叉树的结构让我们输出正方形的结构
    输入格式:
    第一行:T -> 数据组数
    - 每组数据:
    - 第一行:n 表示你要输出的将是一个n*n的矩阵
    - 第二行:m 表示所给的树的边数
    - 以下m行:描述树结构
    - m+3行: s 表示叶子结点个数
    - 以下q行: 表示各个叶子节点的权值

    • 题解:
      没什么好讲的,直接模拟,也没什么坑.主要还是题面难懂

    • 错误: 1A

    8. 1068 Parencodings

    • 题意:
      对于一个合法的括号串有两种表达方式:
      p[]:p[i]表示在序列中第i个右括号的位置之前有几个左括号.
      w[]:w[i]表示在序列中第i个右括号的位置之前匹配的括号数.
      现在给你一个括号串对应的p[],要求输出w[]. (p.size()<=20)

    • 题解:
      1.直接大模拟:利用p数组的特性把原括号串求出来,然后再根据原串求w.(然而这个方法不是特别的严谨,因为题目中并没有讲数组元素的数据范围,如果p[i]>1000000那岂不是GG了)
      2.分析p[]和q[]的性质,我们发现其实可以维护一个match[],match[i]表示第i个右括号匹配第match[i]个左括号,那么对于w[i]我们只需统计出match的前i(包括i)个元素中大于等于match[i]的有多少个.也就是w[n]=i=1n[match[i]>=match[n]]

    9. 2632 Crashing Robots

    • 题意:
      在一个m行n列的矩阵中,记左下角为(1,1),有s个机器人,它们将执行q条指令.
      指令格式: 机器人编号 指令内容 重复执行次数
      指令内容: L->左转; R->右转; F->前进
      要求:判断这些指令是否能全部执行完
      如果可以,输出OK
      否则如果机器人撞边界了就输出Robot x crashes into the wall
      否则如果机器人撞到别的机器人就输出Robot x crashes into robot y

    • 题解:
      对每个机器人开个struct记录它的坐标和朝向,然后再开个G数组记录整个矩形的情况便于判断合法性.最后直接一步步模拟就行了. 这道题主要的难点在于对那个n*m的矩阵的方向的处理,其它的就没什么了.

    • 错误:1A

    10. 1573 Robot Motion

    • 题意:
      给你一个n*m的矩阵,机器人初始位置在第一行第s列,矩阵中每个元素代表一个方向,表示机器人在这个格子时要走的方向.求机器人是否能走出矩阵,如果行就输出步数,否则输出循环前走的步数和循环步数

    • 题解:
      注意处理方向的问题,然后直接模拟,记录到每个点的步数,如果重复就说明循环了.

    • 错误:1A

    11. 2993 Emag eht htiw Em Pleh gpj.稽滑

    • 题意:
      给你国际象棋中棋子的位置,让你按一定格式输出棋局,详情请见题目…

    • 题解:
      就是一道普通的字符串模拟题,注意行数从下到上才是1~8,然后就没什么难度了

    • 错误:1A

    12.2996 Help Me with the Game 滑稽.jpg

    • 题意:
      输入输出跟2993反了一下…

    • 题解:
      也是一道普通的字符串模拟题,注意行数从下到上才是1~8,然后就没什么难度了

    • 错误:1A
      ===================building=======================
      *:poj居然维修中

    二.基本图论(环,生成树,最短路)

    1. 1860

  • 相关阅读:
    web前端之Javascript的输出
    python编码问题
    python面试题1
    机器学习三剑客补充
    JavaScript设计模式与开发实践 组合模式
    JavaScript设计模式与开发实践 命令模式
    JavaScript设计模式与开发实践 发布—订阅模式
    JavaScript设计模式与开发实践 迭代器模式
    JavaScript设计模式与开发实践 代理模式
    JavaScript设计模式与开发实践 策略模式
  • 原文地址:https://www.cnblogs.com/functionendless/p/9439367.html
Copyright © 2020-2023  润新知