SRM11 T1 骰子 (模拟-->数学)

题目大意:一个骰子在有R*C格的矩形地图上从第一行第一格开始滚来滚去,滚完一行后以相反方向滚下一行,滚完所有格子后停。求所有时刻骰子上方的点数和。

O(RC)做法:模拟。用u,f,r分别记录骰子上、前、右三面的点数。

  向左滚:int d=7-u;u=r;r=d;//骰子相对面上点数和为7,d暂存底面点数,滚动后原来的右面跑到上面,底面跑到右面。

  向右滚:int l=7-r;r=u; u=l;//l暂存左面点数

  向下滚:int b=7-f;f=u; u=b;//b暂存后面点数

O(1)做法:数学(找规律)。在同一行中,每滚4次一循环,这四次的顶面点数和为14。所以ans(r,c)=c/4*r*14+ans(r,c%4)。对于剩下的长条矩阵,仍然存在循环节,循环节长度只与c%4有关。所以可以先打出循环节,再统计。

#include<iostream>
#include<cstdio>
using namespace std;
const int a[4][6]={{0,0,0,0,0,0},{0,1,6,12,14,0},{0,5,11,19,28,36},{0,11,0,0,0,0}};
const int b[4]={1,4,6,2};
const int c[4]={0,14,42,22};
int n,m,x,y,p,q;
int main() {
    scanf("%d%d",&n,&m);
    x=m/4; y=m%4;
    p=n/b[y]; q=n%b[y];
    printf("%lld",(long long)14*x*n+(long long)c[y]*p+(long long)a[y][q]);
    return 0;
}
时间: 2024-08-24 17:12:08

SRM11 T1 骰子 (模拟-->数学)的相关文章

LeetCode 1223. 掷骰子模拟 Dice Roll Simulation - Java - DP

题目链接:1223. 掷骰子模拟 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始编号). 现在,给你一个整数数组 rollMax 和一个整数 n,请你来计算掷 n 次骰子可得到的不同点数序列的数量. 假如两个序列中至少存在一个元素不同,就认为这两个序列是不同的.由于答案可能很大,所以请返回 模 \(10^9 + 7\) 之后的结果. 示例1: 输入:n =

1.28 noip t1难度模拟赛

1 0pts 2 10pts 3 100pts 本想装个逼,从后面开始做,确实t3第一个AC,获得了紫色high light,BUT,第二题自己造的极端数据都过了,结果上讲台看,0分!!怎么可能?!检查了一下精度问题,没毛病啊,在最后两分钟发现我把题读错了--我以为必须要是升序的数列--被坑惨了,两分钟改了一下,得了10pts呵呵.t1没时间调了,死循环 t1迷宫 注意用dp做啊!dfs会爆,bfs懒得写-- #include <bits/stdc++.h> #define rep(i,a,b

数字整除(南阳oj664)(模拟数学)

数字整除 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍.当且仅当差是17的倍数时,原数也是17的倍数 . 例如,34是17的倍数,因为3-20=-17是17的倍数:201不是17的倍数,因为20-5=15不是17的倍数.输入一个正整数n,你的任务是判断它是否是17的倍数. 输入 输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=10^100),表示待判断的正

python应用-掷骰子模拟-pygal

pygal安装: Linux下: pip install pygal Windows下: python -m pip install pygal 效果如图: # -*- coding: utf-8 -*- """ Created on Fri Sep 28 23:07:29 2018 @author: pprp """ from random import randint import pygal class Die(): def __init_

Leetcode-5224 Dice Roll Simulation(掷骰子模拟)

1 typedef pair<int,int> P; 2 typedef long long ll; 3 #define _for(i,a,b) for(register int i = (a);i < b;i ++) 4 #define _rep(i,a,b) for(register int i = (a);i > b;i --) 5 #define INF 0x3f3f3f3f 6 #define MOD 1000000007 7 #define maxn 10003 8 #

[CSP-S模拟测试]:炼金术士的疑惑(模拟+数学+高斯消元)

题目传送门(内部题70) 输入格式 第一行一个正整数$n$,表示炼金术士已知的热化学方程式数量.接下来$n$行,每行一个炼金术士已知的热化学方程式.最后一行一个炼金术士想要求解的热化学方程式,末尾记为$H=?$.每个热化学方程式都是规范的,格式如下:$a\ W\ +\ b\ X\ +\ ...\ =\ c\ Y\ +\ d\ Z\ ...\ H=\ h$表示$a$单位的$W$.$b$单位的$X$与......反应生成了$c$单位的$Y$.$d$单位的$Z$和......,吸收$h$/放出$-h$

[CERC2016]:凸轮廓线Convex Contour(模拟+数学)

题目描述 一些几何图形整齐地在一个网格图上从左往右排成一列.它们占据了连续的一段横行,每个位置恰好一个几何图形.每个图形是以下的三种之一:$1.$一个恰好充满单个格子的正方形.$2.$一个内切于单个格子的圆.$3.$一个底边与格子重合的等边三角形. 已知每个格子的边长都为$1$,请求出这些几何图形的凸包的周长. 输入格式 第一行包含一个正整数$n$,表示几何图形的个数.第二行包含$n$个字符,从左往右依次表示每个图形,$"S"$表示正方形,$"C"$表示圆形,$&q

Day1:T1 模拟 T2 拓扑排序

T1:模拟 自己第一天的简直跟白痴一样啊...模拟都会打错.. 当时貌似在更新最大值的时候打逗比了... if((sum[x]==max && x<maxh) || sum[x]>max){  max=sum[x];  maxh=x; //现在(也就是9月+)再看,脑袋里只有sortsortsort,连最基本的更新最大指都忘了....智商唉.... 附上代码: #include<cstdio> #include<cstring> using namesp

概率与数学期望

这个数学知识点很容易和其他有关的内容结合起来考.其中有几个性质值得我们注意. 1.1 概率定义 我们经常会做一些随机性的实验.实验往往会给出不同的结果,我们称之为样本点.我们把所有样本点构成的集合叫做样本空间,记为\(\Omega\). 在这个样本空间里,我们称一个随机事件是样本空间\(\Omega\)的子集.这里算是扫清了过去的知识盲区:随机事件是一个集合,而不是真的是一个概念上的事件. 对于一个随机事件\(A\),我们可以定义一个数来衡量它在样本空间的"比重",那就是概率.随机事件