codeforces777A

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

注意

在第一个样本中,球最初被放置在中间壳下方,操作员完成了四次移动。

  1. 在第一次移动期间,操作员交换了左壳和中壳。球现在在左壳下面。
  2. 在第二次移动期间,操作员交换了中间壳和右侧壳。球还在左壳下面。
  3. 在第三次移动期间,操作员再次交换左壳和中壳。球又在中间。
  4. 最后,操作员交换了中间壳和右壳。球现在位于右壳下方

这是一道找规律的题目,手动打表发现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;
}

猜你喜欢

转载自blog.csdn.net/zsnowwolfy/article/details/82526405