题目
农夫约翰对牛棚里昏暗的灯光感到不满,刚刚安装了一个新吊灯。
新吊灯由 N
个灯泡组成,这 N
个灯泡围成一圈,编号为 0∼N−1
。
奶牛对这个新吊灯非常着迷,并且喜欢玩以下游戏:
对于第 i
个灯泡,如果在 T−1
时刻,它左侧的灯泡(当 i>0
时,为第 i−1
个灯泡;当 i=0
时,为第 N−1
个灯泡)是开着,那么在 T
时刻,就切换这个灯泡的状态。
这个游戏将持续 B
单位时间。
给定灯泡的初始状态,请确定在 B
单位时间后,它们的最终状态。
代码
import java.util.*;
public class Main {
static int n;
static long k;
static int[] a = new int[1000100];
public static int update(int t)
{
int sum = 0;
for(int i = 0; i < n; i ++)
{
int j = (i - 1 + n) % n;
int x = t >> i & 1;
int y = t >> j & 1;
sum |= (x ^ y) << i;
}
return sum;
}
public static void print(int t)
{
for(int i = 0; i < n; i ++)
System.out.println(t >> i & 1);
return;
}
public static void main(String[] args) {
Scanner inScanner = new Scanner(System.in);
n = inScanner.nextInt();
k = inScanner.nextLong();
int sum = 0;
for(int i = 0; i < n; i ++)
{
int t = inScanner.nextInt();
sum = sum | t << i;
}
inScanner.close();
Arrays.fill(a, 0);
for(int i = 1; ; i ++)
{
sum = update(sum);
if(i == k)
{
print(sum);
break;
}
else if(a[sum] == 0)
{
a[sum] = i;
}
else
{
int l = i - a[sum];
int r = (int) ((k - i) % l);
while(r-- > 0)
sum = update(sum);
print(sum);
break;
}
}
}
}
/*
5 6
1
0
0
0
0
*/