站外题求助,玄三关!!!
  • 板块灌水区
  • 楼主Like_Amao
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/7/14 19:35
  • 上次更新2024/7/14 20:54:44
查看原帖
站外题求助,玄三关!!!
993044
Like_Amao楼主2024/7/14 19:35

1165. 【2012年中山纪念中学信息学竞赛初一选拔赛一】纪中游戏(d)

题目描述

纪中的学生是很幸福的,因为纪中有很多课外活动,每一个学生都能找到施展才华的舞台。除了上面说的JBA外,每年还有元旦晚会、主持人大赛、形象大使、街舞比赛、心声晚会、每周一演等等很多活动。 最近纪中又推出一项益智类的游戏——玩骰子,骰子是一个立方体,数字1到6分布在6个面上(如图所示),而且对着的两个面上的数字之和等于7,也就是说6对着1,5对着2,4对着3。

一开始骰子被放在一个R*C的棋盘的左上角格子上,骰子一开始的状态是:数字1在上面,1的右边是3,同样为上图所示(即上面为1,下面为6,左面为4,右面为3,前面为2,后面为5)。 现在允许你进行以下操作:把骰子往右滚直到到达最后一列,然后把骰子往下滚到达下一行,再把骰子往左滚直到碰到第一列,然后把骰子往下滚到达下一行,再把骰子往右滚直到碰到最后一列,再把骰子往下滚到达下一行。。。,如此反复下去直到所有的格子都经过一次。 要求计算到达所有格子时上面数字之和。

输入

第一行包含两个整数R和C(1<=R,C<=100,000)

输出

计算到达所有格子时上面数字之和。

样例输入

样例输入1
3 2
样例输入2
3 4
样例输入3
737 296


样例输出

样例输出1
19
样例输出2
42
样例输出3
763532

数据范围限制

50%的数据满足:1<=R,C<=100。

提示

样例1经过每个格子时骰子上面的数字依次为:1 4 5 1 3 5。

本蒟蒻damn马为神犇们奉上!!!

#include<bits/stdc++.h>
using namespace std;
int main()
{
//	freopen("d.in","r",stdin);
//	freopen("d.out","w",stdout);
	int r,c,t=1,a[7]={0,1,6,4,3,2,5};
	long long ans=0;
	cin>>r>>c;
	int p=(c-1)/4;
	int q=(c-1)%4;
	for(int i=1;i<=r;i++)
	{
		ans+=(a[1]+a[2]+a[3]+a[4])*p;
		for(int j=1;j<=q;j++)
		{
			if(i%2==1)
			{
				int t=a[1];
				a[1]=a[2];
				a[2]=a[3];
				a[3]=a[4];
				a[4]=t;
				ans+=a[1];
			}
			else
			{
				int t=a[4];
				a[4]=a[3];
				a[3]=a[2];
				a[2]=a[1];
				a[1]=t;
				ans+=a[1];
			}
		}
		int t=a[1];
		a[1]=a[6];
		a[6]=a[2];
		a[2]=a[5];
		a[5]=t;
		ans+=a[1];
	}
	cout<<ans;
	return 0;
}

不忍直视

2024/7/14 19:35
加载中...