Description

Link.

给定 \(n\) 组坐标。构造长度为 \(m\) 的序列 \(\{c_n\}\) 和 \(n\) 组包含 LRUD 的路径,满足对于每一组坐标:

  • \(c_i\) 表示第 \(i\) 步「步长」。
  • 对于每个坐标,从 \((0,0)\) 开始走,共走 \(m\) 步。第 \(i\) 步可以让 \((x,y)\) 变成 \((x±c_i,y)\) 或 \((x,y±c_i)\) 。
  • 走完 \(m\) 次之后,恰好走到这组坐标。
  • 要求 \(m\leq 40,c_i\leq 10^{12}\) 。

Solution

好强的题啊。

先考虑无解的情况。

即是 \(x_{i}+y_{i}\) 的奇偶性不同的情况为无解。

仔细看 \(m\) 的限制疑似是 \(\log(x+y)\) 级别的,考虑二进制拆分。

于是考虑 \(\{2^{k}\}\) 可以凑出的坐标。

只考虑 1-dimension 的做法。

我们能够维护的地方就是 \(\sum_{i=0}^{k}2^{i}=2^{k+1}-1\)(这里算的是曼哈顿距离)。

那么这一定是个奇数,如果 \((x,y)\) 的曼哈顿距离是偶数就考虑换原点。

那么这就做完了。

full ver.

using i64 = long long;
using pii = std::pair<i64, i64>; std::vector<int> sL;
std::vector<std::string> dR;
std::pair<int, int> as[MAXN];
int n, wax[4], way[4];
char trans[4]; int main () {
std::ios::sync_with_stdio ( 0 ); std::cin.tie ( 0 ); std::cout.tie ( 0 );
std::cin >> n; initial ();
rep ( i, 1, n ) std::cin >> as[i].first >> as[i].second;
rep ( i, 2, n ) if ( ( as[i].first + as[i].second + as[i - 1].first + as[i - 1].second ) & 1 ) return ( puts ( "-1" ), 0 );
sL.push_back ( 1 );
rep ( i, 1, 30 ) sL.push_back ( 1 << i );
if ( ( ( as[1].first + as[1].second ) & 1 ) ^ 1 ) sL.push_back ( 1 );
std::reverse ( sL.begin (), sL.end () );
rep ( i, 1, n ) {
dR.push_back ( std::string () );
i64 curx = as[i].first, cury = as[i].second;
if ( ( ( curx + cury ) & 1 ) ^ 1 ) dR[i - 1].push_back ( 'U' ), cury --;
per ( j, 30, 0 ) rep ( k, 0, 3 ) {
i64 nxtx = curx + ( i64 )wax[k] * ( ONE64 << j );
i64 nxty = cury + ( i64 )way[k] * ( ONE64 << j );
if ( std::abs ( nxtx ) + std::abs ( nxty ) < ( ONE64 << j ) ) {
curx = nxtx, cury = nxty;
dR[i - 1].push_back ( trans[k] );
break;
}
}
}
std::cout << sL.size () << '\n';
for ( int p : sL ) std::cout << p << ' ';
std::cout << '\n';
for ( std::string p : dR ) std::cout << p << '\n';
return 0;
}

Solution -「ARC 103B」Robot Arms的更多相关文章

  1. Solution -「ARC 104E」Random LIS

    \(\mathcal{Description}\)   Link.   给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...

  2. Solution -「ARC 101D」「AT4353」Robots and Exits

    \(\mathcal{Description}\)   Link.   有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...

  3. Solution -「ARC 110D」Binomial Coefficient is Fun

    \(\mathcal{Description}\)   Link.   给定非负整数序列 \(\{a_n\}\),设 \(\{b_n\}\) 是一个非负整数序列且 \(\sum_{i=1}^nb_i\ ...

  4. Solution -「ARC 124E」Pass to Next

    \(\mathcal{Description}\)   Link.   有 \(n\) 个人站成一个环,初始时第 \(i\) 个人手里有 \(a_i\) 个球.第 \(i\) 个人可以将自己手中任意数 ...

  5. Solution -「ARC 126E」Infinite Operations

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),定义一次操作为: 选择 \(a_i<a_j\),以及一个 \(x\in\mathbb R ...

  6. Solution -「ARC 126F」Affine Sort

    \(\mathcal{Description}\)   Link.   给定 \(\{x_n\}\),令 \[f(k)=\left|\{(a,b,c)\mid a,b\in[0,c),c\in[1,k ...

  7. Solution -「ARC 125F」Tree Degree Subset Sum

    \(\mathcal{Description}\)   Link.   给定含有 \(n\) 个结点的树,求非负整数对 \((x,y)\) 的数量,满足存在 \(\exist S\subseteq V ...

  8. Solution -「ARC 125E」Snack

    \(\mathcal{Description}\)   Link.   把 \(n\) 种零食分给 \(m\) 个人,第 \(i\) 种零食有 \(a_i\) 个:第 \(i\) 个人得到同种零食数量 ...

  9. Solution -「ARC 058C」「AT 1975」Iroha and Haiku

    \(\mathcal{Description}\)   Link.   称一个正整数序列为"俳(pái)句",当且仅当序列中存在连续一段和为 \(x\),紧接着连续一段和为 \(y ...

  10. Solution -「ARC 101E」「AT 4352」Ribbons on Tree

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的树,其中 \(2|n\),你需要把这些点两两配对,并把每对点间的路径染色.求使得所有边被染色的方案数 ...

随机推荐

  1. hugp-MemE关键美化

    配置front matter 使用vscode snippet快捷生成front matter 参考博客:vs-code-workflows-for-hugo. markdown-snippets-n ...

  2. Python进行大文件的备份

    Python进行大文件的备份的思路:每次仅从原文件中读取指定字符的内容后写入新文件,然后循环操作. def copy_big_file(): # 接收用户输入的文件名 old_file = input ...

  3. 不同大小的缓冲区对 MD5 计算速度的影响

    最*需要在计算大文件的 MD5 值时显示进度,于是我写了如下的代码: public long Length {get; private set; } public long Position { ge ...

  4. 【保姆级教程】Vue项目调试技巧

    前言 在Vue项目开发过程中,当遇到应用逻辑出现错误,但又无法准确定位的时候,知晓Vue项目调试技巧至关重要,debug是必备技能. 同后台项目开发一样,可以在JS实现的应用逻辑中设置断点,并进行单步 ...

  5. ASIC加速技术在ASIC加速性能优化中的新应用与挑战

    目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 4. 应用示例与代码实现讲解 5. 优化与改进 1. 引言 随着计算机技术的发展,芯片的性能和面积都得到了极大的提升.为了进一步提高芯片的 ...

  6. 驱动开发:内核远程线程实现DLL注入

    在笔者上一篇文章<内核RIP劫持实现DLL注入>介绍了通过劫持RIP指针控制程序执行流实现插入DLL的目的,本章将继续探索全新的注入方式,通过NtCreateThreadEx这个内核函数实 ...

  7. Unity的IActiveBuildTargetChanged:深入解析与实用案例

    Unity IActiveBuildTargetChanged Unity IActiveBuildTargetChanged是Unity引擎中的一个非常有用的功能,它可以让开发者在切换构建平台时自定 ...

  8. 【Python】Locust持续优化:InfluxDB与Grafana实现数据持久化与可视化分析

    前言 在进行性能测试时,我们需要对测试结果进行监控和分析,以便于及时发现问题并进行优化. Locust在内存中维护了一个时间序列数据结构,用于存储每个事件的统计信息. 这个数据结构允许我们在Chart ...

  9. Linux下手工编译libiconv库的小问题

    我的电脑是 Ubuntu 14.04 LTS, 自己手工编译 php5.6, 打开 ZEND_EXTRA_LIBS='-liconv' 时, 发现没有安装 libiconv, 也就是编码转换的库, 所 ...

  10. iostream,iostream.h,stdio.h的纠葛

    include <iostream.h>非标准输入输出流 include 标准输入输出流 C++中为了避免名字定义冲突,特别引入了"名字空间的定义",即namespac ...