模拟与高精度

模拟

0 什么是模拟

模拟就是按照题意建模,题目让你干什么你就照着它干什么。

模拟的思路非常简单,基本不需要思考。但模拟题有码量大,难调试等缺点,在考场写错也非常浪费时间。

1 经典例题

扫雷游戏

solution

这是一道再简单不过的模拟题了。
直接找到一个地雷然后按照题意对它周围的空格内的数加一即可。
注意边界问题。
时空复杂度: $O(N^2)$

#include <iostream>
#include <cstdio>
using namespace std;
int n, m;
char mp[110][110];
int ans[110][110];
int dx[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
int dy[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        scanf("%s", mp[i] + 1);
        for (int j = 1; j <= m; j++) {
            if (mp[i][j] == '*') {
                for (int k = 0; k < 8; k++) {
                    ans[i + dx[k]][j + dy[k]]++;
                }
            }
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (mp[i][j] == '*') {
                cout << '*';
            } else {
                cout << ans[i][j];
            }
        } cout << endl;
    } cout << endl;
    return 0;
}

习题:

因为作者时间紧张,所以部分习题不配有题解,如有需要,请在评论区告知,谢谢!
一些须知

P1563 玩具谜题

P1328 生活大爆炸版石头剪刀布

P4924 [1007]魔法少女小Scarlet

P1065 作业调度方案

P3952 时间复杂度

2 高精度运算

P1601 A+B Problem(高精)

以下摘自百度百科

高精度算法,属于处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。
一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。
对于非常庞大的数字无法在计算机中正常存储,于是,将这个数字拆开,拆成一位一位的,或者是四位四位的存储到一个数组中, 用一个数组去表示一个数字,这样这个数字就被称为是高精度数。
高精度算法就是能处理高精度数各种运算的算法,但又因其特殊性,故从普通数的算法中分离,自成一家。

高精度就是处理普通数据类型存不下的数之间的运算。

相信大家都学过列竖式,高精度其实就是在模拟列竖式的过程。

首先要解存储的问题。

我们可以用字符串输入,然后用一个int型的数组来存储。

这里我们可反向存储,方便我们从低位开始运算也方便高位进位。

接下来我们就开始模拟小学列竖式,从低位加起,超过十就进位。

核心代码:

//a+b=c
//代码有漏洞请指出 
int a[MAX], b[MAX], c[MAX];//用a[0]存储位数,bc同理
//假设a,b已经预处理好
c[0] = max(a[0], b[0]);
for (int i = 1; i <= c[0]; i++) {
    c[i] += (a[i] + b[i]) % 10;
    c[i + 1] += (a[i] + b[i]) / 10;
}
//处理进位 
while (c[c[0] + 1]) {
    c[c[0] + 2] += c[c[0] + 1] / 10;
    c[c[0] + 1] %= 10;
    c[0]++;
}
//反向输出即为答案 
for (int i = c[0]; i; i--) {
    cout << c[i];
}

减法,乘法和除法与加法类似,这里不再赘述。

练习

P1601 A+B Problem(高精)

 

P1303 A*B Problem

P1009 阶乘之和(A+B&A*B)

P1045 麦森数

挑战:P1080 国王游戏(涉及贪心,后续也会讲到)

3 大模拟挑战

模拟有时也会出得很变态。

以下几道大模拟做一道就差不多了。

P2482 [SDOI2010]猪国杀

P2586 [ZJOI2008]杀蚂蚁

P3693 琪露诺的冰雪小屋

原文地址:https://www.cnblogs.com/zcr-blog/p/12609630.html