[模拟] 多校赛-开学觉醒赛 G 骰子

题目描述

silechen有一颗骰子,他喜欢跟骰子玩游戏,一开始他将骰子平放在地上,然后骰子按照silechen的指令在地上滚动,silechen想将知道骰子每次接触地面的面(也就是骰子的下面)的值加起来是多少(注意,一开始接触地面的值也要算进去)? 

输入

第一行是数据组数 1<=T<=10 

    接下来每组数据 

    第一行是6个整数,表示骰子的前、后、左、右、上、下的值是多少 

    第二行1<=n<=100000 

    第三行是n个整数,表示silenchen每次发出的指令 

    指令有4种 

    0:表示骰子向前滚动一次 

    1:表示骰子向后滚动一次 

    2:表示骰子向左滚动一次 

    3:表示骰子向右滚动一次 

输出

输出T行,每行一个整数ans,表示每次骰子接触地面的面加起来的值(保证ans在int范围内.

1
1 2 3 4 5 6
4
0 1 2 3
22

很有意思的模拟题目

//#pragma GCC optimize(2)
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <ctime>
#include <vector>
#include <fstream>
#include <list>
#include <iomanip>
#include <numeric>
using namespace std;
typedef long long ll;

const int MAXN = 1e6 + 10;

//1 2 3 4 5 6 
//前后左右上下

int arr[10] = {0}, ans = 0;

int brr[10] = {0};

void cal(int mode)
{
	ans += arr[6];

	if(mode == 0)
	{
		brr[1] = arr[5];
		brr[2] = arr[6];
		brr[3] = arr[3];
		brr[4] = arr[4];
		brr[5] = arr[2];
		brr[6] = arr[1];
	}
	if(mode == 1)
	{
		brr[1] = arr[6];
		brr[2] = arr[5];
		brr[3] = arr[3];
		brr[4] = arr[4];
		brr[5] = arr[1];
		brr[6] = arr[2];
	}
	if(mode == 2)
	{
		brr[1] = arr[1];
		brr[2] = arr[2];
		brr[3] = arr[5];
		brr[4] = arr[6];
		brr[5] = arr[4];
		brr[6] = arr[3];
	}
	if(mode == 3)
	{
		brr[1] = arr[1];
		brr[2] = arr[2];
		brr[3] = arr[6];
		brr[4] = arr[5];
		brr[5] = arr[3];
		brr[6] = arr[4];
	}
	for(int i = 1; i<= 6; i++)
	{
		arr[i] = brr[i];
	}
	return ;
}

int main()
{
	ios::sync_with_stdio(false);

	cin.tie(0);     cout.tie(0);

    int T;

    cin>>T;

    while(T--)
    {
    	ans = 0;
    	
    	for(int i = 1; i <= 6; i++)
    		cin>>arr[i];

    	int oprt;

    	cin>>oprt;

    	while(oprt--)
    	{
    		int t;

    		cin>>t;

    		cal(t);
    	}

    	cout<<ans + arr[6]<<endl;
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/Zeolim/article/details/81939444