jzoj3082. 【NOIP2012模拟11.1】骰子游戏
2016-08-18 19:38
253 查看
题目
滚骰子是一件有益身心健康的运动,因此骰子游戏可是一个很受年轻人欢迎的游戏。现在先介绍一下这个闻名遐迩的骰子游戏吧。
首先是主角:骰子。骰子就是很普通的骰子:骰子有六个面,分别标号1到6,三对面上的数字之和均为7。以下是骰子的一个图示。
然后我们介绍这个游戏的地图:一个R*C的网格图。
骰子一开始的状态如上图所示(即上面为 1,下面为 6,左面为 4,右面为 3,前
面为 2,后面为 5),且位置在左上角。
然后重头戏来了,你需要的操作就是滚动骰子。滚动骰子当然是有轨迹的。你需要从左到右滚动到右端,然后向下滚动一格然后在向左滚动到左端,再向下一格,如此反复…直到最下面一行为止。
游戏的目的就是请你计算出骰子到达每个格点时,骰子上方的数字之和。
Input
第一行包含两个整数 R 和 C。
Output
输出仅一行,表示表示数字之和。
Sample Input
3 2
Sample Output
19
Hint
对于50%的数据1<=R,C<=100
对于100%的数据 1<=R,C<=100000
样例 1 经过每个格子时骰子上面的数字依次为:1 4 5 1 3 5。
分析
滚骰子要一行行滚,对于每行有循环,所以可以O(n)解决。代码
#include<cmath> #include<algorithm> #include<cstdio> #include<cstdlib> #include<cstring> #include<queue> using namespace std; long long n,m,ans,a[6]={1,6,2,5,4,3}; void gun1() { long long t=a[0]; a[0]=a[4]; a[4]=a[1]; a[1]=a[5]; a[5]=t; } void gun2() { long long t=a[0]; a[0]=a[5]; a[5]=a[1]; a[1]=a[4]; a[4]=t; } void gun3() { long long t=a[0]; a[0]=a[3]; a[3]=a[1]; a[1]=a[2]; a[2]=t; } int main() { scanf("%lld%lld",&n,&m); m--; for (int i=1;i<=n;i++) { ans+=a[0]; ans+=(a[0]+a[1]+a[2]+a[3])*floor(m/4); if (i%2) { for(int i=1;i<=m%4;i++) { gun1(); ans+=a[0]; } } else { for(int i=1;i<=m%4;i++) { gun2(); ans+=a[0]; } } gun3(); } printf("%lld",ans); return 0; }
相关文章推荐
- JZOJ3082. 【NOIP2012模拟11.1】骰子游戏
- JZOJ3083. 【NOIP2012模拟11.1】塔(加强)
- {题解}[jzoj3083]【NOIP2012模拟11.1】塔
- jzoj3083. 【NOIP2012模拟11.1】塔(加强)
- 中国剩余定理模板(JZOJ 3093. 【NOIP2012模拟11.7】合唱队形)
- {题解}[jzoj3084]【NOIP2012模拟11.3】超级变变变
- JZOJ2936. 【NOIP2012模拟8.9】逐个击破(2017.9B组)
- [JZOJ 3052]【NOIP2012模拟10.25】剪草
- JZOJ2937. 【NOIP2012模拟8.9】监听还原(2017.9B组)
- JZOJ3052. 【NOIP2012模拟10.25】剪草
- JZOJ2938. 【NOIP2012模拟8.9】分割田地
- JZOJ3051. 【NOIP2012模拟10.25】单元格
- JZOJ 3056. 【NOIP2012模拟10.27】数字
- jzoj 3076. 【备战NOIP2012图论专项模拟试题】位图
- [JZOJ5442]【NOIP2017提高A组冲刺11.1】荒诞([BZOJ3060]【POI2012】Tour de Byteotia)
- 【NOIP2012模拟11.1】塔(加强)
- [JZOJ 3051]【NOIP2012模拟10.25】单元格
- 【NOIP2012模拟11.1】骰子游戏
- JZOJ【3072】【NOIP2012模拟10.31】掷骰子
- JZOJ 3053 【NOIP2012模拟10.25】旅行