考古学者的安娜和布鲁诺正在伊朗进行遗址调查。他们的角色分配是安娜前往遗址进行挖掘,而布鲁诺则在基地营进行挖掘结果的分析。
挖掘将持续
安娜每天只能使用通信设备一次,设备一次可以发送长度为
然而,通信设备出现故障,发送的长度
为了不延误遗址调查,安娜和布鲁诺请求正在伊朗举办的国际编程比赛的候选人你,编写一个程序来传达挖掘结果。
通信方式
你需要实现两个函数 void Anna(int N,long long X,int K,int P[])
和 long long Bruno(int N,int A[])
来实现以下功能:
Anna
将得到一个长为 的空白序列和一个不大于 的数字 ,这个函数需要为每一位赋予一个 或 的值来保存 ,其中序列中有 个位置是损坏的:无论设置为 还是 ,这些位置的值都恒为 , 数组保存着这些位置的下标;Bruno
将得到Anna
操作后的序列,这个函数需要依靠这个序列来还原Anna
得到的数字 。
仅支持 C++
语言提交。
你需要实现两个函数。
void Anna( int N, long long X, int K, int P[] )
:这是编码程序,
在这个函数中,你可以调用 void Set( int pos, int bit )
,表示把序列
long long Bruno( int N, int A[] )
:这是解码程序,其中 Anna(...)
中调用 Set(...)
的结果。你需要返回解码得到的数。
请注意,这里的数组开头下标皆为