JOISC2017 E - 壊れた機器 (Broken Device)
Tangninghaha · · 题解
做的第一道通信题。
题面:JOI 官网上的 PDF
提交:AtCoder
题意
有一个长度为
现在 Anna 需要使用这个空白数组向 Bruno 发送一个数字
数组下标从
WTC 的 Hard Version:
需要实现两个函数:
-
void Anna( int N, long long X, int K, int P[] )给定空白数组长度
N ,需要发送的数字X ,坏位置的数量K ,坏位置下标P 。在这个函数中需要调用
N 次void Set( int pos, int bit )函数,将空白数组pos 位置赋值为bit 。 -
long long Bruno( int N, int A[] )将会给出一个长度为
N 的数组A ,需要返回 Anna 发送的数字X 。
做法
注意到 Bruno 难以知道哪个位置是好的,哪个位置是坏的。
提示
将 150 个位置两两分一组,分为 75 组。
解法 1
有了提示后容易想到:如果一组中,有一个位置是坏的,将两个位置都设置为
一种想法是:将数组下标进行随机打乱,这样出现最坏情况的概率很小。
解法 2
WTC 说观察了 maspy 的提交记录得到的做法。
给每一个位随机赋一个权值
WTC 说期望需要
随机化只要在两个函数中使用相同的随机种子,得到的结果就是相同的了。