[POI2008]TRO-Triangles

https://www.cnblogs.com/GXZlegend/p/7509699.html

平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000

计算几何。

只需要用到S=|x1y2-x2y1|/2

开始对所有点按照x排序。

枚举第一个点P,求出其他点关于P的坐标。

为了去掉绝对值,按照x1/y1排序。y1等于0要特判。

然后发现是前缀和。

本质类似于O(n^3)的暴力,每个三角形只会被统计一次。

N^2logN

突破口:固定P点。求出其他点关于P点的坐标。

[POI2009]WIE-Hexer

大陆上有n个村庄,m条双向道路,p种怪物,k个铁匠,每个铁匠会居住在一个村庄里,你到了那个村庄后可以让他给你打造剑,每个铁匠打造的剑都可以对付一些特定种类的怪物,每条道路上都可能出现一些特定种类的怪物,每条道路都有一个通过所需要的时间,现在要从1走到n,初始的时候你没有剑,要求在经过一条道路的时候,对于任意一种可能出现在这条道路上的的怪物,你都有已经有至少一把剑可以对付他,求从1走到n的最短时间(打造剑不需要时间)

1≤n≤200,0≤m≤3000,1≤p≤13

状压dp

f[i][S],到i点,打S集合的怪,最短路。

但是转移明显有环。

于是状压最短路处理环。dij搞一下。

[POI2010]ANT-Antisymmetry

对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串。比如00001111和010101就是反对称的,1001就不是。

现在给出一个长度为N的01字符串,求它有多少个子串是反对称的。

有趣的题目。

考虑一个串合法的条件。

翻转之后,S[i]=A[n-i+1],有点类似回文串。

A[n-i+1]=S[n-i+1]^1,那么有:S[i]^S[n-i+1]=1,

就是异或意义下的回文子串个数。

一般回文:S[i]=S[n-i+1],这个回文:S[i]^S[n-i+1]=1,

Manacher计算即可。

注意,只能统计偶数的回文,奇数的回文不存在。

并且,奇数的回文,Manacher的一步:p[i]=min(mx-i,2*id-i)不适用。

存在:

//因为会有这种例子(先忽略#(反正是一样的))
//0100 1 1101 中间这个1的p[i]=4,当搜到010011 1 01这个1时
//它所对应的01 0 011101这个0的p[i]=2,但显然上面那个1的p[i]!=2
//所以此处要加2,不能计算奇数长度的情况

其实,就是因为奇数的话对称一下可能会重合id位置。但是id^id=0,所以就错了。

所以,如果后面这个1取到的话,如果成为了最大的id,那么本身其实没有对称性。依赖它进行对称,就错了。

只能每次i+=2

显然不会影响答案。并且不会影响复杂度。

[POI2006]OKR-Periods of Words

求一个串的所有前缀的最长周期(可以覆盖出去)。

最小周期我们会求。i-nxt[i]

由于所有的周期都是最小周期的倍数,所以倍增一下+hash找到最长的即可。nlogn

太暴力了。

所有的i-nxt[nxt[nxt...[i]]]]]]都是周期。

只要不断跳nxt找到最小的j即可。

ans+=i-j

然后就令fail[i]=j,以后到i就一步跳到最小的。类似记忆化。就可以O(n)了。

也启示我们如何把最长的前缀等于后缀长度转化成最短的前缀等于后缀长度。

POI 2018.10.21的更多相关文章

  1. 2018.10.21 codeforces1071B. Minimum path(dp+贪心+bfs)

    传送门 唉考试的时候写错了两个细节调了一个多小时根本没调出来. 下来又调了半个小时才过. 其实很简单. 我们先dpdpdp出最开始最多多少个连续的aaa. 然后对于没法继续连续下去的用贪心+bfsbf ...

  2. POI 2018.10.20

    [POI2005]BANK-Cash Dispenser 有多少个4位字符串是所有操作序列的子串. 10^4枚举字符串.暴力判断会TLE 发现,我们就是在每个操作序列中不断找第一个出现的c字符. 预处 ...

  3. 2018.10.21 codeforces1071A. Cram Time(贪心构造)

    传送门 直接先看最多能够凑出几个. 然后可以得到一个结论就是如果保证所有页数之和是小于等于A+BA+BA+B的一定都对应着一种合法方案. 如何构造? 我们对于第一天的AAA个小时,从大向小选,如果当前 ...

  4. POI 2018.10.27

    [POI2015]LOG 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1,询问能否进 ...

  5. POI 2018.10.22

    [POI2015]ODW 喵锟讲过.分块. N>=blo,那就暴力倍增往上跳.O(N/blo*logN) N<blo,预处理,f[i][j]表示,i往上跳,每次跳j步,到根节点为止,权值和 ...

  6. 2018.10.19浪在ACM 集训队第一次测试赛

    2018.10.19浪在ACM 集训队第一次测试赛 待参考资料: [1]:https://blog.csdn.net/XLno_name/article/details/78559973?utm_so ...

  7. 【2018.10.20】CXM笔记(思维)

    1. 给你个环状字符串,问从哪个地方拆开能使它的字典序最小. 先预处理任意子串的哈希值. 然后枚举拆点,将它与当前最优的拆点比较谁更优(就是从哪拆的字典序更小),具体方法是二分+哈希找出两串最长的相同 ...

  8. 退役前的记录(2018.10.14-NOIP2018)

    退役前的记录 诸位好,我是\(CJ\)最菜的\(Oier\),已经是\(G2\)的老年选手了,不知道什么时候就会退役了,总之\(G1\ double\)的机会已经没有了,去年因为联赛失利而止步,而今年 ...

  9. 20172319 2018.10.19《Java程序设计教程》第7周课堂实践(补写博客)

    20172319 2018.10.19 <Java程序设计教程>第7周课堂实践 课程:<程序设计与数据结构> 班级:1723 学生:唐才铭 学号:20172319 指导老师:王 ...

随机推荐

  1. Qt-QML-ComboBox-自定义,实现状态表示,内容可以动态正价,使用ListModel

    哎呀呀呀, 问:杀死一个程序员一个程序要需要进步? 答:改三次需求 我感觉我就要再这需求的变更中被杀死了.不管怎么说,总是要跟着需求走的的,客户才是第一么(要不是因为钱,我才不会了) 下面先上个效果 ...

  2. Java异常处理介绍(Java知识的重点内容)

    Java 异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你 ...

  3. 查找 二叉树中 k1 到 k2区间的节点

    vector<int> res; int key1, key2; void traverse(TreeNode * root){//采用前序遍历 if(root == NULL) retu ...

  4. FPGA学习-PS2接口

    选自http://m.elecfans.com/article/774143.html

  5. LiveVideoStack Meet|深圳 多媒体开发新趋势

    2018年初始,音视频技术生态并不平静,Codec争夺愈加激烈,新一代标准的挑战一浪高过一浪:WebRTC的定版也为打通浏览器.移动端乃至IoT带来了机会:此外AI.区块链技术的兴起,催化着与多媒体领 ...

  6. truffle框架快速开发合约步骤

    矩阵元区块链智能合约开发指南 1 适用范围 本规范描述了矩阵元区块链系统智能合约的开发约束与规范,用以指导DAPP开发者按照本规范开发基于矩阵元区块链运行的应用. 2 术语解释 术语 术语解释 DAP ...

  7. Windows下PATH等环境变量详解(转载)

    本文转载自http://legend2011.blog.51cto.com/3018495/553255 在学习JAVA的过程中,涉及到多个环境变量(environment variable)的概念, ...

  8. selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep())---基于python

    我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中 ...

  9. 常用正则表达式,你要的都在这里(校验字符,数字,特殊需求qq,电话等)

    一.校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0|[1-9 ...

  10. 异常--try..catch

    class Program { static void Main(string[] args) { try { object obj = null; int N = (int)obj; } catch ...