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

原文地址:https://www.cnblogs.com/functionendless/p/9439367.html