当前位置: 首页 > news >正文

2025.8.24 Codeforces Round 1044 (Div. 2)

比赛链接

Solved: 4/6


A. Redstone?

题意

给一个序列,问能否重排使得 \(\prod_{i=1}^{n-1} \frac {a_i}{a_{i+1}} = 1\)

题解

当且仅当存在两个数相等。

bool solve(){int n; cin >> n;vector <int> a(n); cin >> a;sort(all(a));for (int i=0; i<n-1; ++i) if (a[i] == a[i+1]) return 1;return 0;
}

B. Villagers

题意

\(n\) 个点,每次可以给其中任意两个点连边,代价为它们点权的 max,同时它们的点权会同时减少 min。求将所有点连通所需最小代价。

题解

从大到小排序,让第 \(2k-1\) 大的和第 \(2k\) 大的连边,如果一共有奇数个就随便取一个 0 和最小的连边。剩下的都连 0 和 0 即可。

void solve(){int n; cin >> n;vector <int> a(n); cin >> a;sort(all(a));ll ans = 0;for (int i=n-1; i>=0; i -= 2) ans += a[i];cout << ans << '\n';
}

C. The Nether

题意

交互题。有一张 \(n\) 个点的 DAG,每次可询问一个起点和一个点集,交互器会给出从这个起点出发,仅经过这个点集时最长路经过的点数。求原图中的一条最长路(起点任意)。询问次数不超过 \(2n\)

题解

首先让每个点作为起点询问全图的最长路 \(f_1, \dots, f_n\)。假设最大值是 \(m\)。任取一个 \(f_x = m\) 的点 \(x\) 作为起点。
对所有 \(f_y = m-1\)\(y\) 询问 \((x,y)\) 是否存在(这只需令起点为 \(x\),点集为 \(\{x,y\}\) 即可),
任取一个边 \((x,y)\) 存在的 \(y\)(考虑 DAG 最长路的 dp 过程,这样的 \(y\) 一定存在)作为第二个点。
然后令 \(x\leftarrow y\) 重复上述过程即可找到这条路径上所有的点。
因为每个点只会作为 \(y\) 至多一次,所以这部分询问次数不会超过 \(n\)。加上一开始询问 \(f\) 的次数,总询问次数不超过 \(2n\)

int ask(int x, const vector <int>& s)
{cout << "? " << x << ' ' << s.size() << ' ';for (int u: s) cout << u << ' ';cout << endl;cout.flush();int res;cin >> res;return res;
}void solve(){int n; cin >> n;vector <int> s;vector <vector<int>> buc(n+1);for (int i=1; i<=n; ++i) s.push_back(i);int m = 0;for (int i=1; i<=n; ++i){int l = ask(i, s);buc[l].push_back(i);m = max(m, l);}vector <int> ans(m+1);ans[m] = buc[m][0];for (int i=m-1; i; --i){for (int v: buc[i]){if (ask(ans[i+1], {ans[i+1], v}) == 2){ans[i] = v;break;}}}cout << "! " << m << ' ';for (int i=m; i; --i) cout << ans[i] << ' ';cout << endl;cout.flush();
}

D. Chicken Jockey

题意

\(n\) 个障碍,从低到高生命值为 \(a_1,\dots,a_n\)。每次可以选择一个障碍 \(i\) 攻击,使其生命值减少 \(1\)
如果某个障碍的生命值 \(\leq 0\),它会消失且上方的所有障碍就会掉落并形成新的一堆障碍,顺序不变,同时它上方的第一个障碍会减少其高度点生命值。
求最少的攻击次数使所有障碍消失。

题解

从上到下消除显然是更优的,因为这样可以让掉落的贡献最大化。

dp,设 \(f_i\) 为清空 \(i\) 以上的障碍所需最少的攻击次数,枚举上一次清空的位置 \(j\) 转移,可得 dp 方程

\[f_i = \min\{f_{i+1} + a_i, \min_{j > i} \{f_{j+1} + a_i + \max\{0, a_{i+1} - i\} + s_j - s_{i+1} - (j - i - 1)\}\} \]

维护 \(f_{j+1} + s_j - j\) 的最大值,转移复杂度 \(O(1)\),总复杂度 \(O(n)\)

void solve(){int n; cin >> n;vector <int> a(n+2);vector <ll> s(n+2), f(n+2);for (int i=1; i<=n; ++i) cin >> a[i], s[i] = s[i-1] + a[i];ll mn = INF;for (int i=n; i; --i){f[i] = min(f[i+1] + a[i], i == n ? INF : mn + a[i] + max(0, a[i+1] - i) - s[i+1] + i+1);mn = min(mn, f[i+1] + s[i] - i);}cout << f[1] << '\n';
}
http://www.sczhlp.com/news/35306/

相关文章:

  • 有没有做gif的专门网站企业文化是什么
  • 个人网站工商备案百家号自媒体平台注册
  • 智慧团建密码只能是8位吗武汉谷歌seo
  • 做网站加手机app需要多少钱短视频seo厂家
  • 制作网站 美工白杨seo课程
  • codeigniter 手机网站开发如何创建个人网页
  • 江苏建设工程招标网官方网站好用的百度网盘搜索引擎
  • 建个企业网站还是开个淘宝店网站推广的方式和方法
  • 如何建设一个查询系统网站免费推广软件 推广帮手
  • 创建一个公司需要什么西安seo哪家好
  • 南昌优易科 网站建设百搜网络科技有限公司
  • 网站设计需求分析报告指数网站
  • 制作类似网站软件全国最好网络优化公司
  • 资金盘网站开发多少钱网络营销seo优化
  • 免费创建自己的网站2023年新闻热点事件
  • 苏州住房和城乡建设局网站首页seo网站优化网站编辑招聘
  • 句容本地网站千锋教育培训多少钱费用
  • wordpress 顶部栏 悬浮刷关键词优化排名
  • 网站模块功能网站链接查询
  • 专做装修的网站发帖推广百度首页
  • 珠海网站设计公司百度seo优
  • 淄博那里有做网站的搜狗链接提交入口
  • claude技巧
  • 湖北建设信息网官网seo博客大全
  • 手机网站后台管理天津seo培训机构
  • 二级单位网站建设以营销推广为主题的方案
  • 遵义做网站的公司门户网站制作
  • 拖式网站建设教育培训网页设计
  • seo网站快速排名站长统计官方网站
  • 酒店协会网站集静态模板优化网站关键词排名软件