题目描述
纪中的学生是很幸福的,因为纪中有很多课外活动,每一个学生都能找到施展才华的舞台。除了上面说的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;
}
不忍直视