Bomboslav喜欢在他的房间里看窗外,在外面玩着名的贝壳游戏。游戏由两个人扮演:操作员和玩家。操作员采用三个相似的不透明外壳,并在其中一个下面放置一个球。然后他通过交换一些对来洗牌,玩家必须猜测球的当前位置。
Bomboslav注意到那些人并不是很有创造力,因此操作员总是在奇数移动(第一,第三,第五等)期间将左外壳与中间外壳交换,并且在均匀移动期间始终将中间外壳与右外壳交换(第二,第四,等等)。
让我们从左到右编号从0到2的 shell 。因此,左外壳的编号为0,中间的外壳为1,右外壳为2。Bomboslav已经错过了将球放在炮弹下方的那一刻,但是他知道操作员正好进行了n次动作,最后球在炮弹x下面。现在他想知道,球的初始位置是什么?
输入
输入的第一行包含一个整数Ñ(1≤ ñ ≤2·10 9) -由操作员进行的移动的数目。
第二行包含一个整数X(0≤ X ≤2 )- ,其中球被发现后壳的索引Ñ运动。
产量
打印0到2之间的一个整数 - 最初放置球的shell的索引。
例子
输入
4 2
产量
1
输入
1 1
产量
0
注意
在第一个样本中,球最初被放置在中间壳下方,操作员完成了四次移动。
- 在第一次移动期间,操作员交换了左壳和中壳。球现在在左壳下面。
- 在第二次移动期间,操作员交换了中间壳和右侧壳。球还在左壳下面。
- 在第三次移动期间,操作员再次交换左壳和中壳。球又在中间。
- 最后,操作员交换了中间壳和右壳。球现在位于右壳下方
这是一道找规律的题目,手动打表发现6次一循环,所以每次用n%6找到所在位置即可
代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<string.h>
#include<cmath>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<map>
using namespace std;
typedef long long ll;
const int maxn = 100;
//6次一循环
ll n;
int x;
int a[6][3] = { { 0,1,2 },{ 1,0,2 },{ 1,2,0 },{ 2,1,0 },{ 2,0,1 },{ 0,2,1 } };
int main()
{
ios::sync_with_stdio(false);
cin >> n>>x;
n = n % 6;
cout << a[n][x];
return 0;
}