说起叉姐,这是一个让人ym的上古神犇,欣赏了一波叉姐的vj,上面挂的基础魔法训练对我来说每题都是神题。

每天做一两个,做了几天终于做了好几个题了,现在写一下心得。

POJ 2443

这题给你1000个集合,里面有10000个数,然后20W次询问,问你哪两个数有没有在同样的集合中出现。

这题自然就是询问所有集合啊,但是肯定会超时,所以就需要优化

这题用到的是压位优化

用数组记录某个数组是否出现在某个集合中,但是集合1000个需要优化,int可以存31位,于是可以集合的编号/30,这个存数组下标,余数用二进制存为值,然后查询的时候枚举1000/30就可以了,只要两个值与一下就行了Orz

AC代码:http://paste.ubuntu.net/13099921/

POJ 3244

D(Ta, Tb) = max {Ia − IbJa − JbKa − Kb} − min {Ia − IbJa − JbKa − Kb}

这题是一个元素含有三种属性,然后两个元素之间求一个函数,就是这样子算

首先化简上面的式子D(Ta,Tb)=(|(Ia-Ib)-(Ja-Jb)|+|(Ja-Jb)-(Ka-Kb)|+|(Ia-Ib)-(Ka-Kb)|)/2=(|(Ia-Ja)-(Ib-Jb)|+|(Ja-Ka)-(Jb-Kb)|+|(Ia-Ka)-(Ib-Kb)|)/2

于是可以用三个数组存下每个元素的i-j,i-k,j-k,然后排序,最小的就是减了n-1次,最大的就是加了n-1次,所以这样搞一下,最后除以2就行了

AC代码:http://paste.ubuntu.net/13099949/

POJ 3685

i2 + 100000 × i + j2 - 100000 × j + i × j    

这题让你求里面第M小的元素是多少,有5W*5W的元素,所以不可能是穷举,所以需要找一些特点

首先看出来这个元素的值关于i是递增的,可以先二分答案,然后每列二分,找到每列里比它小的数的个数,加起来和m比较,这题还是比较容易的

AC代码:http://paste.ubuntu.net/13099975/

POJ 3213

这题给你三个矩阵,前两个乘积得到第三个,但是第三个里有一个元素错误了,让你找出错在第几行第几列,正确答案是多少

矩阵的乘法是O(n^3)的复杂度,1000阶的显然不能暴力乘,需要一些特殊技巧咯。

首先想到的是只有一个元素出错,就是说这一行的和肯定错误了,其他行的和肯定没错,所以可以在输入第二个矩阵的时候,把每一行的和都求出来,因为第三个矩阵C(1,1)=A(1,1)*Browsum(1)+A(1,2)*Browsum(2)+……+A(1,p)*Browsum(p)

然后就在输入c矩阵的时候判断哪一行错了,然后暴力n^2乘出这行的结果,就行了

AC代码:http://paste.ubuntu.net/13099996/

POJ 3465

这题是说你要和一个黑龙肛正面,然后你可以打他造成一些伤害,你可以用抵挡,抵挡他一次的伤害,还有就是你可以治疗回血

然后问你n回合能打死黑龙么,打死的话最少多少回合,打不死的话最多扣多少血

开头觉得这题好难啊,完全没思路,但是可以这样想

因为要最多扣血,所以可以直接当你每次都攻击黑龙,然后吃他伤害,然后当你被打死的那一下,就找前面黑龙打你最疼的那一下,用格挡或者治疗(如果治疗多余攻击伤害的话用治疗),这里可以用优先队列优化,存起来黑龙的每次伤害,然后每次先打黑龙,再判断你死了没,因为第n回合,如果你打死了黑龙,自己也死了,算你赢

AC代码:http://paste.ubuntu.net/13100019/

POJ 2595

这道题是一个物理模型,p可以看成x坐标,q可以看成y坐标,然后sigma ux=C,sigma u=1,可以看成质心的x坐标为c,然后就是求sigma uy的最大和最小,把n个点的凸包求出来,在凸包上找横坐标为c的时候的质心纵坐标的最大和最小值,就是枚举凸包上的点就行了,这题真是过于机智orz了

可以当作凸包模板,也让我更好的理解了一发凸包

AC代码:http://paste.ubuntu.net/13634290/

POJ 3040

这题就是个贪心,给你一些钱币的面值和数量,然后让你组成大于等于C的钱,能组成几份

这题贪心的思路是,从价值高的开始贪,能放几个就放几个,如果最后没满c,就从最小的能放的放一个就行了,然后对应每种钱币扣掉最多能扣掉的份数,然后重新从大到小贪,这个题是我完全独立做出来的,表示贪心就是需要大胆的走起来

AC代码:http://paste.ubuntu.net/13100497/

POJ 3182

这题就是给你个类似迷宫图的图,然后中间有一块不能走,边上都能走,然后让你从一个起点,绕过中间的那坨东西,再走回来,走最小环

这个感觉好难啊,bfs根本无法解决啊,然后怒看一波题解,题解真是过于厉害了,找中间那坨东西的里面一点,然后往左边或者右边(如果起点和这个线在同一直线上,并且起点在这个选择的点的左边,就往右边射,否则往左边)

然后把这个图就分成了两块,在这个射线上,的每个点,都往上或者往下走,然后不能越过这个线,两边bfs,然后最小和就是答案

AC代码:http://paste.ubuntu.net/13100709/

POJ 3467

给你一个图,然后上面每块都有不同的颜色,然后询问每种颜色的十字架有多少个,十字架就是四个脚一样长的东西,并且要颜色一样,然后就是可以改变某点的颜色,继续询问

这题正解应该挺难,反正我是爆搜水过去的,不造为何这么屌,记录以每个点为中心的十字架个数,再记录总的,每次修改颜色不全部爆搜,这样就能减少不少的不必要情况,水过

AC代码:http://paste.ubuntu.net/13100739/

POJ 3375

这题是给你一些电脑,还有一些接口,每个接口连一个电脑,现在要把每个电脑都连到接口上,然后,要求连完这些电脑之后,用的导线距离最小

题解:这题接口有10W个,数据很大,所以感觉比较复杂,其实这题是dp

dp[i][j]=min(dp[i][j-1],dp[i-1][j-1]+abs(a[j]-b[i])),表示前i个电脑连着前j个接口时候的最小花费

但是这样开不下,所以要优化,i那一维用滚动数组优化掉,并且这样10W*2000的枚举还是会TLE,可以发现其实每个电脑只会和他最近的左右各2000个电脑相连,所以其实只需要枚举他的左右2000个,这样就是n^2的复杂度了orz

每次枚举的时候先要比较起点max(i,pos[i]-n-1),终点min(m,pos[i]+n+1);

然后转移的时候要记录前一个的终点,如果枚举的接口序号超过了上一个接口的终点,就需要变成dp[cur^1][pe]+abs(a[i]-b[j]);

最后输出dp[cur^1][pe]就行了

感觉这题好难啊,还是我dp太弱了,dp必须改天来一发

AC代码:http://paste.ubuntu.net/13100819/

POJ 3419

这题真是极为的经典,必须是走一发了

这题求区间内最长连续不重复串的长度

一般区间问题都是线段树啥的来维护,这题是用RMQ

首先预处理出pre[i],表示以i为结尾,到最前面不出现重复的位置,然后把这个信息放进RMQ里,首先我们知道,i递增,pre[i]也是递增的,起码是单调不减的,所以查询的时候,在L-R之间,有些位置结尾的串肯定会走到L外面,就用二分,先找出第一个pre[i]大于l的i,然后这个pos-l,当作一个值,然后用RMQ再查询pos到R的最大值,于是就轻松解决了,我还是太弱了,区间信息的维护和查询,线段树之类的我真是菜狗,必须走起来。鲁大师用离线线段树也轻松怒过,我必须燃烧了

AC代码:http://paste.ubuntu.net/13100846/









叉姐的魔法训练小结(未完结)相关推荐

  1. 川大优秀毕业生在GitHub上建了一个项目《深度学习500问》,还未完结就获赞无数

    近年来,深度学习在语音.图像.自然语言处理等领域都取得了非常不错的成果,自然而然地成为技术人员争相学习的热点. 为了帮助正在学习深度学习的伙伴们,川大的一名优秀毕业生,在GitHub上创建了一个项目: ...

  2. Codeforces Round #501 (Div. 3)【未完结】

    2022.3.7 题单地址:https://codeforces.com/contest/1015 目录 A. Points in Segments B. Obtaining the String[模 ...

  3. D - 卿学姐与魔法

    卿学姐与魔法 Time Limit: 1200/800MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...

  4. 神仙程序媛小姐姐的一些列Java教程,从小白到进阶,春招和秋招必备的面试题,全站式保姆的Java教程导航帖(未完结)

    Java入门教程导航,未完结,以后的时间不定期补番. Java基础篇 (入门阶段) 小姐姐教你:java环境变量 的配置与详解(全网最详细教程 小姐姐手把手教你最基础Java语法,快来我的碗中 [Ja ...

  5. ACM训练小结-2018年6月16日

    今天题目情况如下: A题:线段树+XOR性质. 情况:由于写法问题,调试困难,浪费大量时间. B题:(对所有满足i mod p==q,求a[i]之和),无修改,直接上n*sqrt(n)的分块写法. 情 ...

  6. 2021春季每日一题【week5 未完结】

    目录 179. 最大数[贪心] 1453. 移掉K位数字[贪心 / 思维] 783. 二叉搜索树节点最小距离 71. 二叉树的深度 208. 实现 Trie (前缀树)[未完成] 142. 前缀统计[ ...

  7. Acwing第 22 场周赛【未完结】

    目录 4000. 排位[签到] 4001. 训练[二分] 4000. 排位[签到] https://www.acwing.com/problem/content/description/4003/ # ...

  8. 2021春季每日一题 【week2 未完结】

    目录 LeetCode 191. 位1的个数[难度: 简单 / 知识点: 位运算] 85. 不用加减乘除做加法[难度: 中 / 知识点: 思维 全加器] 341. 扁平化嵌套列表迭代器[模拟] 149 ...

  9. C. 奇奇怪怪的魔法阵(未搞懂)

    C. 奇奇怪怪的魔法阵 题意: n个点m条边,定义集合S为独立集,当且仅当任意x,y∈S,x与y之间没有边.空集也是独立集 现在对于每一个点的集合T,有多少子集为独立集 设N=0,1,-,n-1,AT ...

最新文章

  1. 流程 - 什么是真正的Scrum?
  2. LA2965侏罗纪(异或和为0的最大数字个数)
  3. STL的红与黑--rb_tree红黑树
  4. 【面向对象】面向对象程序设计测试题5-Java中的对象交互测试题
  5. 菜鸟新手们得福音纯css菜单导航
  6. jsp使用rem页面内容不能根据屏幕分辨率自适应_为什么很多web项目还是使用 px,而不是 rem?...
  7. Android 开发工具下载
  8. ENVI的seamless mosaic工具详解
  9. 关于如何写代码和学习代码
  10. u深度重装系统详细教程_U深度U盘安装原版win7系统的图文教程
  11. 四川省内二本计算机公立好的大学排名,盘点四川省最好的几所二本大学
  12. 牛客 送分啦-QAQ
  13. 爬虫基础回顾-requests
  14. hread first html5,(完整版)2017届上海市徐汇区高三英语二模卷(含听力文本和答案)...
  15. java计算机毕业设计社区养老综合服务平台服务端源码+系统+数据库+lw文档+mybatis+运行部署
  16. 关于vim的详细配置
  17. android4.2屏幕录像,android——使用自带录屏工具进行屏幕录像
  18. Word图文混排中图片的高级处理技巧
  19. raspberry pi_我如何从Mac Mini迁移到Raspberry Pi
  20. 西安的一些互联网公司一览

热门文章

  1. 是什么使Slider Revolution成为最好的WordPress Slider插件?
  2. 数据库数据独立性的理解
  3. 2022 SWPUCTF Web+Crypto方向wp
  4. linux系统如何修复分区工具,推荐一个Linux分区恢复工具Testdisk(Windows也能用)...
  5. ADM周期-阶段目标说明
  6. JS判断搜索引擎来路跳转代码---百度,360,sogou收录
  7. shell终端多目录间快速cd工具
  8. PC电脑装机知识分享
  9. 这个标星 15.9k+ 的 项目竟然是全球排名第一的免费开源软件
  10. 剑指核心-TaoCloud全闪SDS助力构建高性能云服务