No Problem

暴力

Str

存在循环节,大力找出来即可,长度显然不超过 \(10^3\) .

Not TSP

题面

TSP 问题,但是游览第 \(u\) 个点要满足下列条件之一

  1. \(1\dots u-1\) 均被游览过 .
  2. \(1\dots u-1\) 均未被游览过 .

题解

肯定是先往左跳然后往右填 .

dp 一下就好了 .

\(dp_{i,j}\) 表示 \(i\) 跳到 \(j\) .

代码

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
template<typename T>
inline int chkmin(T& a, const T& b){if (a > b) a = b; return a;}
template<typename T>
inline int chkmax(T& a, const T& b){if (a < b) a = b; return a;}
const int N = 1555;
const ll INF = 0x3f3f3f3f3f3f3f3fll;
ll n, d[N][N], dp[N][N], s[N], pre[N];
inline ll gg(int l, int r){return max(0ll, s[r-1] - s[l-1]);}
int main()
{
scanf("%lld", &n);
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++) scanf("%lld", d[i]+j);
for (int i=1; i<=n; i++) s[i] = s[i-1] + d[i-1][i];
for (int i=0; i<=n; i++){dp[0][i] = s[i]; d[0][i] = d[1][i];}
for (int i=2; i<=n; i++)
{
for (int j=0; j<i-1; j++) dp[j][i] = dp[j][j+1] + s[i] - s[j+1];
dp[i-1][i] = INF;
for (int j=0; j<i-1; j++) chkmin(dp[i-1][i], dp[j][i-1] + d[j][i]);
}
ll ans = INF;
for (int i=1; i<n; i++) chkmin(ans, dp[i][n]);
printf("%lld\n", ans);
return 0;
}

Game

题面

Alice 和 Bob 在做游戏 .

平面上有 \(n\) 个点,Alice 先手,每次每个人需要画一条平行于 \(x\) 或 \(y\) 轴的一条直线,穿过前一条直线穿过的某个点 . 不能画与之前直线重合的直线 . 不能操作的人输 .

问谁必胜 .

题解

如果有一个点 \(x,y\),就连一条边 \(x\to y\),这相当于是两条直线在转移 .

于是问题就等价于 Alice 和 Bob 在这张图上走,走过的点不能再走 .

然而我们把 \(x,y\) 取出来,会发现这玩意其实是一个二分图 .

这个有一个结论:后手必胜当且仅当图有完备匹配 .

证明:

如果有匹配:Alice 每动一步 Bob 就跑去它的匹配点,这样最后 Alice 就无路可走了 .

若不然:Alice 选一个不在匹配中的点,Bob 会选一个在匹配中的点,这样 Alice 就可以用上面的策略取胜了 .

代码

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
template<typename T>
inline int chkmin(T& a, const T& b){if (a > b) a = b; return a;}
template<typename T>
inline int chkmax(T& a, const T& b){if (a < b) a = b; return a;}
const int N = 1555;
template<typename T>
struct pool
{
unordered_map<T, unsigned> pol;
unsigned cc = 0;
unsigned get(T x)
{
auto ptr = pol.find(x);
if (ptr == pol.end()){pol[x] = ++cc; return cc;}
else return ptr -> second;
}
};
pool<int> T;
int n, vis[N], L[N], R[N];
vector<int> g[N];
set<int> vx, vy;
inline void addedge(int u, int v){g[u].emplace_back(v);}
bool dfs(int u, int t)
{
if (vis[u] == t) return false;
vis[u] = t;
for (int v : g[u])
if (!L[v] || dfs(L[v], t)){L[v] = u; R[u] = v; return true;}
return false;
}
inline void match(){for (int i=1; i<=n; i++) dfs(i, i);}
int main()
{
scanf("%d", &n);
for (int i=1, x, y; i<=n; i++)
{
scanf("%d%d", &x, &y);
x = T.get(x); y = T.get(y);
vx.insert(x); vy.insert(y);
addedge(x, y);
}
if (vx.size() != vy.size()){puts("Alice"); return 0;}
match();
for (int i : vx) if (!R[i]){puts("Alice"); return 0;}
for (int i : vy) if (!L[i]){puts("Alice"); return 0;}
puts("Bob");
return 0;
}

丽泽普及2022交流赛day19 半社论的更多相关文章

  1. 丽泽普及2022交流赛day22 无社论

    开始掉分模式 . T3 有人上费用流了???(id) 不用 TOC 了 . T1 暴力 T2 没看见 任意两圆不相交,gg 包含关系容易维护,特判相切 . 单调栈即可 T3 贪心 T4 神秘题

  2. 丽泽普及2022交流赛day20 1/4社论

    目录 T1 正方形 T2 玩蛇 T3 嗷呜 T4 开车 T1 正方形 略 T2 玩蛇 略 T3 嗷呜 (插一个删一个?) 找出相同的,丢掉循环节 . 感觉非常离谱,,, 正确性存疑 正确性问 SoyT ...

  3. 丽泽普及2022交流赛day15 社论

    前言 link 太牛逼了,补完我一定放代码 . orz 越看越牛逼 orz . 时间复杂度都是口胡,不要信 . 以下是目录 目录 目录 前言 A 题面 题解 代码 B 题面 题解 代码 C 题面 题解 ...

  4. 丽泽普及2022交流赛day21 社论

    A 暴力 . greater<double> -> greater<int> \(100\) -> \(50\) 代码丢了 . B dp . 考场上代码抢救一下就过 ...

  5. 丽泽普及2022交流赛day18 社论

    A 暴力扫一遍 B 算法 0 似乎是二分 算法 1 随便贪心 C 算法 1 枚举一个点作为最大值 / 最小值,用单调栈维护其作为答案的左右端点即可轻易计算 . 时间复杂度 \(O(n)\) . 算法 ...

  6. 丽泽普及2022交流赛day17 社论

    http://zhengruioi.com/contest/1088 SoyTony 重新 rk1 . stO SoyTony Orz 省流:俩计数 . 目录 目录 A 题面 题解 Key 算法 1( ...

  7. 丽泽普及2022交流赛day16 社论

    这场比较平凡吧 . 省流: http://zhengruioi.com/contest/1087 目录 目录 A. Gene 题面 题解 算法一(正解) 算法二 B. Fight 题面 题解 算法一( ...

  8. 丽泽普及2022交流赛day14

    目录 A 题面 题解 B 题面 题解 C 题面 题解 D 题面 题解 A 题面 一个 \(1\dots n\) 的排列 \(p\) 和一个 \(1\dots n-1\) 的排列 \(q\) 满足 对排 ...

  9. 青岛理工ACM交流赛 J题 数格子算面积

    数格子算面积 Time Limit: 1000MS Memory limit: 262144K 题目描述 给你一个多边形(用’\’和’/’表示多边形的边),求多边形的面积. 输入  第一行两个正整数h ...

随机推荐

  1. Java学习笔记-基础语法ⅩⅠ-UDP、TCP

    网络编程 三要素:IP地址.端口.协议 IP地址:使用ipconfig查看,如果装了VM的话,会有VMnet1.VMnet8和WLAN,net1不能从虚拟机到主机,net8不能从主机到虚拟机,net0 ...

  2. Swift初探02 数组、集合、元组、字典

    数组.集合.元组.字典 每一门语言基本都会有这些数据结构,swift也不例外,而作为一门现代的语言,swift提供了很多的现成的方法给我们选择. 一.数组 01 数组的定义 // 三种声明方式 var ...

  3. 探索ABP基础架构

    为了了解应用程序是如何配置和初始化,本文将探讨ASP.NET Core和ABP框架最基本的构建模块.我们将从 ASP.NET Core 的 Startup类开始了解为什么我们需要模块化系统,以及 AB ...

  4. JavaScript数组常用方法解析和深层次js数组扁平化

    前言 数组作为在开发中常用的集合,除了for循环遍历以外,还有很多内置对象的方法,包括map,以及数组筛选元素filter等. 注:文章结尾处附深层次数组扁平化方法操作. 作为引用数据类型的一种,在处 ...

  5. 好客租房54-props深入(children属性)

    children属性 表示组件标签的子节点 当组件标签有子节点是 props就会有该属性 props中的组件可以是任意属性 都是可以渲染的 //导入react     import React fro ...

  6. 好客租房9-jsx的学习目标

    1能够知道什么是jsx 2能够使用jsx创建react元素 3能够在jsx使用javascript表达式 4能够使用jsx的条件渲染和列表渲染 5能够给jsx添加样式 jsx的基本使用 jsx中使用j ...

  7. mysql查询关键字补充与多表查询

    目录 查询关键字补充 having过滤 distinct去重 order by排序 limit分页 regexp正则 多表查询 子查询 连表查询 查询关键字补充 having过滤 关键字having和 ...

  8. ML第3周学习小结

    本周收获 总结一下本周学习内容: 1.学习了<深入浅出Pandas>的第五章:Pandas高级操作的三个内容 复杂查询 数据类型转换 数据排序 我的博客链接: Pandas复杂查询.数据类 ...

  9. 白嫖Azure与体验GoLand远程开发

    前言 近期因为有本地开发远程使用Linux编译部署的需求,而虚拟机的性能实在是不敢恭维,WSL的坑之前也踩过(没有systemd等),故考虑使用SSH连接云服务器开发. 目前VSCode提出了Remo ...

  10. 前端2CSS2

    内容概要 伪元素选择器 选择器优先级 字体样式 文字属性 背景属性 display属性 边框属性 盒子模型 浮动(重要) 解决浮动造成的影响 内容详情 伪元素选择器 """ ...