CF437E The Child and Polygon
1.AGC0552.CF1838A-Blackboard-List3.P7959 [COCI2014-2015#6] WTF 题解
4.CF437E The Child and Polygon
5.无所畏惧的求和题解6.[ROI 2018] Innophone 题解7.[SHOI2011]双倍回文 题解8.2023-02-02 比赛试题及题解9.AGC04310.AGC03311.「TAOI-2」Ciallo~(∠・ω< )⌒★ 题解12.CF题解合集13.CF98C Help Greg the Dwarf 题解14.恋爱入门教学题解15.[CSP-S2019] 树的重心 题解16.CSP-S2023 题解17.CSP-S2019 题解18.CSP-S2019 江西 题解19.YNOI 做题记20.NOIP2022 题解21.CF1900D - Small GCD 题解22.杂题记录The Child and Polygon 题解
这世界这么大,遇到了这个奇奇怪怪的题。
这道题其实可以很自然的联想到卡特兰数。
在卡特兰数的计数中,有这么一个意义: 表示把有 条边的凸多边形分成 个三角形的方案数。
利用这个意义可以得到 的另一个递推关系:
而这一道题,正可以类比这个递推关系进行求解。
思路
在卡特兰数递推中, 实际上枚举的是最后一次的分界点。也就是把整个多边形分成两部分,分别划分,再求最终方案数。
首先我们将已知的 个点按照顺时针方向排好序。
类比下来,我们可以設 表示由 这 个点形成的多边形的划分数。
于是
这里 可以连向 当且仅当线段 在线段 的顺时针方向。
于是本题的核心思路就已经出来了。接下来考虑实现问题。
实现
逆时针,顺时针?
我们可以通过向量叉乘的方法来判断所给的点是顺时针还是逆时针。
考虑按照所给的点的顺序计算这个多边形的面积。
枚举 利用 和 的叉乘,可以算出整个多边形的面积(的两倍)。
但是考虑到叉乘的正负性,如果结果为正,则所给的顺序为逆时针(因为 在 的顺时针方向)。
此时就可以搞定逆时针,顺时针的问题了。
可连?不可连?
在前面已经提到, 可以连向 的条件,如何判断?
还是利用 ,如果结果为正,则 在 的顺时针方向,可以连。
于是你成功的可以 本题了。
代码
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 203, mod = 1e9 + 7;
typedef long long lint;
struct Point {
int x, y;
Point() {}
Point(int x, int y) : x(x), y(y) {}
inline lint operator * (const Point &p) {
return (1ll * x * p.y - 1ll * y * p.x);
}
inline Point operator - (const Point &p) {
return Point(x - p.x, y - p.y);
}
} p[N];
lint dp[N][N];
int main() {
cin.tie(0)->sync_with_stdio(false);
int n; cin >> n;
for (int x, y, i = 1; i <= n; ++i) {
cin >> x >> y;
p[i] = Point(x, y);
}
lint clockwiser = 0;
for (int i = 2; i < n; ++i) {
clockwiser += (p[i] - p[1]) * (p[i + 1] - p[1]);
}
if (clockwiser > 0) // if is positive, the it is counterclockwise
reverse(p + 1, p + 1 + n);
for (int i = 1; i < n; ++i)
dp[i][i + 1] = 1;
for (int len = 2; len < n; ++len) {
for (int l = 1, r = len + 1; r <= n; ++l, ++r) {
for (int k = l; k <= r; ++k) {
if ((p[r] - p[l]) * (p[k] - p[l]) > 0)
dp[l][r] = (dp[l][r] + 1ll * dp[l][k] * dp[k][r] % mod) % mod;
}
}
}
cout << dp[1][n] << '\n';
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App