巨魔没金币
来源:互联网 发布:手机数据流量无法上网 编辑:程序博客网 时间:2024/06/02 21:28
巨魔没金币
题目描述
某巨魔去了一趟拍卖行卖东西,赚了不少金币,然后又买了些东西,就没金币了。
该巨魔没了金币,但他还有很多银币。
他搞了张圆桌。划分出
接下来每次按如下操作:在任意两个银币之间放上一个银币,然后将原来的银币拿走;
所放银币的正反面由它两边的两个银币决定,若两个银币均为正面朝上或反面朝上,则所放银币为正面朝上,否则为反面朝上。
那么操作
输入格式
第一行包含两个整数
接下的一行包含
输出格式
输出一行
样例输入
10 5
2 2 2 1 1 1 1 1 1 2
样例输出
0 1 0 1 0 1 0 1 0 2 0 1 0 2 0 1 0 1 0 1
数据范围
Solution
若将每一位上的数字减
打表发现,进行
那么,我们可以将
Summary
考场上我是发现了
进行
2k 次操作后,i 位上的数字为i−2k 与i+2k 上的数字的异或值(将n 个数字向左、右无限复制)
的规律的。
但当时特别脑残,认为这个规律只能做一个特判,即
Code
#include <iostream>#include <cstdio>#define LL long longusing namespace std;LL n,t;LL w[200010];LL tot[200010];void work(LL x){ LL tmp=1; while(tmp<=x)tmp<<=1; tmp>>=1; while(x){ while(tmp>x)tmp>>=1; for(int i=1;i<=2*n;i++){tot[i]=w[i];w[i]=-1;} if(tot[1]!=-1&&tmp==1||tot[1]==-1&&tmp!=1) for(int i=2;i<=2*n;i+=2){ w[i]=tot[(((i-tmp)-1)%(2*n)+2*n)%(2*n)+1]^tot[((i+tmp)-1)%(2*n)+1]; } else for(int i=1;i<=2*n;i+=2){ w[i]=tot[(((i-tmp)-1)%(2*n)+2*n)%(2*n)+1]^tot[(((i+tmp)-1)%(2*n)+2*n)%(2*n)+1]; } x-=tmp; }}int main(){ freopen("silver.in","r",stdin); freopen("silver.out","w",stdout); scanf("%lld%lld",&n,&t); for(int i=1;i<=n;i++){ w[2*i]=-1; scanf("%lld",&w[2*i-1]); w[2*i-1]--; } work(t); for(int i=1;i<=2*n;i++)printf("%d ",w[i]+1); return 0;}
- 巨魔没金币
- 巨魔没金币 [bzoj 1411]
- 金币
- 金币
- 金币
- 金币
- 金币问题
- 检查金币
- 金币问题
- 蛮力法找假金币
- 检查金币
- 金币阵列
- 分金币
- 金币转换
- 金币问题
- 金币兑换
- 分金币
- 金币阵列
- Servlet之Cookies汉字编码问题
- 单例模式之坑与爬坑
- jvm jstat 命令使用
- 错题解答与汇总
- join命令
- 巨魔没金币
- QDialog显示后焦点不在画面上的问题
- JSP中的编码设置
- 设计模式:单一职责原则
- 定时器的简单用法
- sql server 备份失败[上加载的介质已格式化为支持 1 个介质簇,但根据指定的备份设备,应支持 2 个介质簇]
- L2-002. 链表去重
- webService三要素 SOAP、WSDL、UDDI
- iOS开发 自定义UIAlertController的样式