几何+算法专题

  • 算法
    • 字符串算法
      • 最长对称子串(Manacher 算法)
    • 动态规划
      • 至多删三个字符
  • 几何
    • 神坛(极角排序)

算法

字符串算法

最长对称子串(Manacher 算法)

题目链接
解题思路

  1. 在进行马拉车算法之前,我们需要将字符串进行处理,第一个就是在原字符串的首部和尾部加特殊字符 ,以及每两个字符之间加上相同的特殊字符。这样做的目的是将字符串个数变为奇数方便处理。同时再在最头部放上一个不一样的另一个特殊字符,只有的目的是在判断是否对称的时候不会越界。
  2. 有人说KMP算法和Manacher 算法有点类似。总某些方面来说确实是这样的。在KMP算法中的next数组是以该字符为结尾满足条件的最大长度。(具体可以搜所),在Manacher 算法中求的p数组是以该字符为中心,右边距离最长的对称字符的最长距离。
  3. 对于Manacher 算法可以参考这篇博客:马拉车算法

代码

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
const int N = 2010;
string s;
int p[N], mx, id, ans;string motify(string s) {string str = "$";for (int i = 0 ; i < s.size() ; ++i)str += "#", str += s[i];str += "#";return str;
}int main() {getline(cin, s);s = motify(s);for (int i = 1 ; i < s.size() ; ++i) {if (i < mx)p[i] =  max(p[2 * id - i], mx - i);elsep[i] = 1;while (s[i - p[i]] == s[i + p[i]])p[i]++;if (i + p[i] > mx) {mx = p[i];id = i ;ans = max(ans, p[i] - 1);}}cout << ans << endl;return 0;
}

动态规划

至多删三个字符

题目链接

解题思路
dp[i][j]表示前i里面删除了j个有多少种方法
第i个删除或者不删除有两种情况
d p [ i ] [ j ] = d p [ i − 1 ] [ j ] + d p [ i − 1 ] [ j − 1 ] dp[i][j] = dp[i-1][j]+dp[i-1][j-1]dp[i][j]=dp[i−1][j]+dp[i−1][j−1]
这样会有重复
例如cc这种,需要去重,怎么去重呢,那就看什么情况多计算了
很显然删除 X…X (… 代表不知道几个字符,X代表相同字符)
X…和 …X时最后剩下的都是X,会有重复
所以 这种情况需要去重复
当我们处理到i,j时,假设前面x处有一个相同字符,那么就用
d p [ i ] [ j ] − = d p [ x − 1 ] [ j − ( i − x ) ] dp[i][j] -= dp[x-1][j-(i-x)]dp[i][j]−=dp[x−1][j−(i−x)]
意思就是删除x到i-1的字符这部分会有重复

代码:

#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;const int N = 1E6 + 10;int n ;
long long f[N][4];
char s[N];int main() {cin >> (s + 1);n = strlen(s + 1);f[0][0] = 1;for (int i = 1 ; i <= n ; ++i)for (int j = 0 ; j <= 3 ; ++j) {f[i][j] = f[i - 1][j];if (j)f[i][j] +=  f[i - 1][j - 1];for (int k = i - 1 ; k && (j - i + k) >= 0  ; --k) {int x = i - k;if (s[k] == s[i] ) {f[i][j] -= f[k - 1][j - x];break;}}}long long  ans = 0;for (int j = 0 ; j <= 3 ; ++j)ans += f[n][j];cout << ans << endl;return 0;
}

几何

神坛(极角排序)

解题思路:

极角排序 遍历每个点和其余所有点向量 极角排序 找的相邻两条线段 求三角形面积。
这与为什么是与极角排序,是因为我们在求面积的时候是利用叉积来求的,而叉积的数组除了与向量长度有关之外,还有是两个向量之间的夹角。因此我们按照极角排序之后,那么相邻两个向量进行叉积得到的结果肯定会比于其余的向量进行叉积的值更小。

我们依次以某一个点为极点来进行排序。之后遍历取最小值。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node
{ll x,y;
}po[100005],poo[100005];
bool cmp(node a,node b)
{return b.y*a.x > b.x*a.y;
}
int main()
{int n;scanf("%d",&n);for(int i = 1;i <= n;i++){scanf("%lld%lld",&po[i].x,&po[i].y);}ll ans = 1e18;for(int i = 1;i <= n;i++){int p=0;for(int j = 1;j <= n;j++){if(i == j) continue;poo[p].x = po[j].x - po[i].x;poo[p].y = po[j].y - po[i].y;p++;}sort(poo,poo+p,cmp);for(int j = 1;j < p;j++){ans = min(ans,abs(poo[j].y*poo[j-1].x-poo[j].x*poo[j-1].y));}}printf("%.3f\n",ans/2.0);return 0;
}

PTA团体程序设计天梯赛篇(四)----几何+算法专题相关推荐

  1. PTA团体程序设计天梯赛篇(五)---- 难题篇一(30分题目)

    PTA团体程序设计天梯赛 数据结构类型 L3-002 特殊堆栈(树状数组) L3-003 社交集群(并查集) 搜索 L3-004 肿瘤诊断(三维bfs) 确保bfs只遍历一次的方法 图论 L3-005 ...

  2. PTA团体程序设计天梯赛篇(一)----模拟专题

    模拟专题 字符串模拟 c++ 常用字符串处理函数 1. 截取子串 2. 替换子串 3. 查找子串 4.删除字符串 5.判断与转换函数 6 翻了(替换子串) 敲笨钟(字符串查找+字符串替换) 估值一亿的 ...

  3. PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)

    PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:      欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...

  4. PTA团体程序设计天梯赛(L1-061~L1-070)

    PTA团体程序设计天梯赛[L1-061~L1-070] L1-060 心理阴影面积 (5 分) L1-062 幸运彩票 (15 分) L1-063 吃鱼还是吃肉 (10 分) L1-064 估值一亿的 ...

  5. PTA团体程序设计天梯赛-练习集(3)

    PTA团体程序设计天梯赛-练习集 L1-001 Hello World (5 分) 这道超级简单的题目没有任何输入. 你只需要在一行中输出著名短句"Hello World!"就可以 ...

  6. PTA团体程序设计天梯赛-练习集

    PTA团体程序设计天梯赛-练习集 L1-024 后天 L1-025 正整数A+B L1-026 I Love GPLT L1-027 出租 L1-029 是不是太胖了 L1-030 一帮一 L1-03 ...

  7. PTA团体程序设计天梯赛-练习集Level-1(参考代码C语言/Python版)

    本题目集截止到2022年天梯赛 受个人水平限制,<PTA团体程序设计天梯赛-练习集>中暂时只能把Level-1的题目做出来(也许有些Level-2的题可以写出来?)-我不是专门搞竞赛的,参 ...

  8. PTA团体程序设计天梯赛(L1-031~L1-040)

    PTA团体程序设计天梯赛[L1-031~L1-040] L1-031 到底是不是太胖了 (10 分) L1-032 Left-pad (20 分) L1-033 出生年 (15 分) L1-034 点 ...

  9. PTA|团体程序设计天梯赛-练习题库集

    文章目录 关于爬取脚本的编写 L1-001 Hello World! (5 分) L1-002 打印沙漏 (15 分) L1-003 个位数统计 (15 分) L1-004 计算摄氏温度 (5 分) ...

最新文章

  1. 傅里叶变换处理音频c++_KWS-SoC——基于Wujian100的音频流关键词检测SoC拓展开发笔记之一...
  2. 面向对象基础及UML建模语言
  3. 「第三篇」全国电子设计竞赛,这些你必须知道的比赛细节,文末附上近十年电赛题目下载...
  4. 【笔记】通过 js——实现 各种跨域
  5. flow.php 漏洞,Ecshop 3.0的flow.php文件SQL注射漏洞修复
  6. Java学习笔记1---JVM、JRE、JDK
  7. kops_使用KOPS的Kubernetes群集中SQL Server
  8. 抽象工厂模式_设计模式(3) 抽象工厂模式
  9. python做excel自动化-Python控制Excel实现自动化办公
  10. 5图片展示_拼多多搜索【智能创意】推广5大功能升级!
  11. Ext.gridPanel中内容对齐
  12. webform CustomValidator
  13. 一款基于 Python 语言的 Linux 资源监视器!
  14. 深度学习:基本概要:监督,无监督,半监督,弱监督,多示例,迁移学习
  15. Builder构建者模式,将复杂对象的创建过程与其表示分离,活学活用才是王道
  16. 编译与调试以及makefile
  17. 个人简历html网页代码(使用chatgpt完成web开发课的实验)
  18. 反渗透膜轻松解决电镀行业水质问题
  19. 实践出真知!7步搞懂分布式全内容,技术总监都拍手叫好
  20. BOM-物料清单(Bill of Material)

热门文章

  1. python如何打印时间,在python2.7中,如何提取和打印日期、时间和m
  2. iis8 php mysql_windows2012下 iis8+php5.2+mysql5 配置
  3. ps -aux 和ps -elf 区别(查看进程)
  4. 【中级软考】软件质量模型的六大特性27个子特性(软件质量特性:功能性、可靠性、易用性、效率性、软件维护性、软件可移植性)
  5. yunyang tensorflow-yolov3 NMS:non maximum suppression 非极大值抑制方法
  6. python 正则表达式 re (.*?)和(.*)的区别(贪婪模式非贪婪模式)惰性匹配
  7. Scholomance Academy 读题训练,模拟(沈阳)
  8. python多线程库_Python多线程常用包对比
  9. racte margin 居中 失效_上干货,微信用情侣签名她肯定很开心,微信个性签名居中隐藏技巧...
  10. spring boot集成webservice接口