Processing math: 100%

[ARC184D] Erase Balls 2D

cxqghzj·2024-11-26 21:13·8 次阅读

[ARC184D] Erase Balls 2D

题意#

给定二维平面上 n 个球,每个球的坐标为 (x,y),规定所有球的 x 坐标和 y 坐标分别形成一个排列。

然后每次操作可以选择一个点 k,然后将所有与她偏序的球删去,即对于所有 p,“xp<xkyp<yk“ 或 “xp>xkyp>yk“ 那么将点 p 删去。

求最后可能的剩余的球的方案数。

n300

Sol#

首先二维平面是假的,直接对于 x 排序,现在设 x=iypi

考虑如何对这个东西 dp,设 fi 表示最后操作了 i 的方案数,枚举 j 表示上一个操作点。

但是这样会算重很多,我们需要保证中间这一段没被删掉的点不重不漏,注意到如果操作某个中间没被删除的点且该操作没有删掉任何点那么就算重了,所以直接钦定中间没被删掉的点至少会覆盖一个另外的点就行。

复杂度:O(n3)

Code#

Copy
#include <iostream> #include <algorithm> #include <cstdio> #include <array> #include <bitset> using namespace std; #ifdef ONLINE_JUDGE #define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++) char buf[1 << 23], *p1 = buf, *p2 = buf, ubuf[1 << 23], *u = ubuf; #endif int read() { int p = 0, flg = 1; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') flg = -1; c = getchar(); } while (c >= '0' && c <= '9') { p = p * 10 + c - '0'; c = getchar(); } return p * flg; } void write(int x) { if (x < 0) { x = -x; putchar('-'); } if (x > 9) { write(x / 10); } putchar(x % 10 + '0'); } bool _stmer; const int N = 305, mod = 998244353; array <int, N> f, s; void Mod(int &x) { if (x >= mod) x -= mod; if (x < 0) x += mod; } bitset <N> vis; bool _edmer; int main() { cerr << (&_stmer - &_edmer) / 1024.0 / 1024.0 << "MB\n"; int n = read(); for (int i = 1; i <= n; i++) { int x = read(), y = read(); s[x] = y; } f[0] = 1; n++, s[0] = n, s[n] = 0; for (int i = 1; i <= n; i++) { for (int j = 0; j < i; j++) { if (s[i] > s[j]) continue; vis = 0; int minn = 2e9, maxn = 0; for (int k = j + 1; k < i; k++) { if (s[k] > s[j] || s[k] < s[i]) continue; if (minn < s[k]) vis[k] = 1; minn = min(minn, s[k]); } bool flg = 0; for (int k = i - 1; k >= j + 1; k--) { if (s[k] > s[j] || s[k] < s[i]) continue; if (maxn < s[k] && !vis[k]) { flg = 1; break; } maxn = max(maxn, s[k]); } if (!flg) /*cerr << i << " " << j << "@" << endl, */f[i] += f[j], Mod(f[i]); } } write(f[n]), puts(""); return 0; }
posted @   cxqghzj  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示
目录