abc274_d Robot Arms 2 题解
1.CSES 1667 Message Route 题解2.P3956 棋盘 题解3.abc233_f Swap and Sort 题解4.abc233_e Σ[k=0..10^100]floor(X/10^k) 题解5.abc233_d Interval 题解6.abc233_c Product 题解7.abc249_f Ignore Operations 题解8.abc249_d Index Trio 题解9.abc248_e K-colinear Line 题解10.abc247_f Cards 题解11.CF1066C Books Queries 题解12.P1038 神经网络 题解13.SeekLuna P1362 拓扑排序 3 题解14.abc232_e Rook Path 题解15.abc235_e MST + 1 题解16.abc234_e Arithmetic Number 题解17.P8786 李白打酒加强版 题解18.abc235_d Multiply and Rotate 题解19.CF1095D Circular Dance 题解20.P6201 & P1985 Fliptile S 题解21.CF1183C Computer Game 题解22.CF1095E Almost Regular Bracket Sequence 题解23.abc256_e Takahashi's Anguish 题解24.abc260_g Scalene Triangle Area 题解25.P8714 填空问题 题解26.abc252_d Distinct Trio 题解27.abc252_f Bread 题解28.abc253_e Distance Sequence 题解29.abc250_e Prefix Equality 题解30.abc250_d 250-like Number 题解31.arc164_a Ternary Decomposition 题解32.abc275_f Erase Subarrays 题解33.abc275_e Sugoroku 4 题解
34.abc274_d Robot Arms 2 题解
35.abc260_f Find 4-cycle 题解36.abc260_e At Least One 题解37.abc273_e Notebook 题解38.abc271_f XOR on Grid Path 题解39.abc271_e Subsequence Path 题解40.abc271_c Manga 题解41.abc269_f Numbered Checker 题解42.abc270_f Transportation 题解43.CF1077E Thematic Contests 题解44.CF1935D Exam in MAC 题解45.CF1144G Two Merged Sequences 题解46.joi2022_yo2_c 国土分割 (Land Division) 题解47.P3588 PUS 题解48.CF1946F Nobody is needed 题解Robot Arms 2
题意
有一个长度为
。- 对于
, 与 的距离为 。 - 对于
,线段 与线段 构成一个直角。
问:是否存在一种放点的方案满足要求,如果存在,输出 Yes
;否则输出 No
。
数据范围
。 。 。
思路
一眼 dp,如果把坐标
线段构成直角?可以发现对于所有下标为奇数的边必然与
所以可以把
注意坐标可能为负数,需要将坐标偏移。
复杂度
以下
- 时间:
。 - 空间:
。
Code
点击查看代码
#include <bits/stdc++.h> using namespace std; const int N = 2e4 + 10, P = 1e4, M = 510; // 注意空间 int t, n, m, x, y, z, a[M], b[M]; bool dp[N][3][3]; int main () { ios::sync_with_stdio(0), cin.tie(0); cin >> t >> x >> y >> z; // 第一条边需要特殊处理 x += P, y += P, dp[P + z][0][0] = dp[P][0][1] = 1; for (int i = 2; i <= t; i++) { cin >> z; if (i % 2) { a[++n] = z; // 存储奇数边 } else { b[++m] = z; // 存储偶数边 } } for (int i = 1; i <= m; i++) { // 很显然 m >= n for (int j = 0; j <= P * 2; j++) { if (i <= n) { dp[j][1][0] = 0; // 滚动数组秀操作 if (j >= a[i]) { dp[j][1][0] = dp[j - a[i]][0][0]; } if (j + a[i] <= 2 * P) { dp[j][1][0] |= dp[j + a[i]][0][0]; } } if (i <= m) { dp[j][1][1] = 0; if (j >= b[i]) { dp[j][1][1] = dp[j - b[i]][0][1]; } if (j + b[i] <= 2 * P) { dp[j][1][1] |= dp[j + b[i]][0][1]; } } } for (int j = 0; j <= P * 2; j++) { if (i <= n) { swap(dp[j][1][0], dp[j][0][0]); } if (i <= m) { swap(dp[j][1][1], dp[j][0][1]); } } } cout << (dp[x][0][0] && dp[y][0][1] ? "Yes" : "No"); // x 和 y 都需要满足 return 0; }
本文作者:wnsyou の blog
本文链接:https://www.cnblogs.com/wnsyou-blog/p/17434966.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步