巴适得板!探秘四川人的“BBBBB桑BBBB”生活哲学

核心内容摘要

震撼来袭!“大雷擦狙高清版视频”——重新定义你的视觉体验!
网站你应该明白我说意思吧:读懂用户心声,让您的网站脱颖而出

揭秘“铜铜铜铜铜铜铜铜”:免费观看的无限可能,一次颠覆你想象的视听盛宴!

算法学习日记 | 今天我用「模拟」解了三道题原来“暴力”也能很聪明大家好我是你们的算法学习搭子 今天继续我的算法入门之旅重点练习了**模拟Simulation**这一看似简单却极其实用的方法。

很多人觉得“模拟暴力”但其实模拟是把现实过程一步步还原到代码中。

它不需要复杂的数学推导只需要我们能清晰地理解问题逻辑然后用循环和条件语句“一步一步走”。

今天我完整做了三道题每一道都坚持用最朴素的模拟方法解决。

下面我把题目原文和我的原始代码原封不动贴出来不做任何删减或美化只为真实记录学习过程。

题目一扫雷题目描述在一个 $ n $ 行 $ m $ 列的方格图上有一些位置有地雷另外一些位置为空。

请为每个空位置标一个整数表示周围八个相邻的方格中有多少个地雷。

输入描述输入的第一行包含两个整数 $ n, m $。

第 2 行到第 $ n1 $ 行每行包含 $ m $ 个整数相邻整数之间用一个空格分隔。

如果对应的整数为 0表示这一格没有地雷。

如果对应的整数为 1表示这一格有地雷。

其中$ 1 \leq n, m \leq 100 $。

输出描述输出 $ n $ 行每行 $ m $ 个整数相邻整数之间用空格分隔。

对于没有地雷的方格输出这格周围的地雷数量。

对于有地雷的方格输出 9。

输入输出样例输入 3 4 0 1 0 0 1 0 1 0 0 0 1 0输出 2 9 2 1 9 4 9 2 1 3 9 2运行限制最大运行时间1s最大运行内存128M✅ 我的代码#includeiostreamusingnamespacestd;constintN150;intmp[N][N];intans[N][N];intmain(){intm,n;cinmn;for(inti1;im;i){for(intj1;jn;j){cinmp[i][j];}}for(inti1;im;i){for(intj1;jn;j){if(mp[i][j]){ans[i][j]9;continue;}for(int_imax(1,i-

;_imin(m,i

;_i){for(int_jmax(1,j-

;_jmin(n,j

;_j){if(mp[_i][_j]){ans[i][j];}}}}}for(inti1;im;i){for(intj1;jn;j){coutans[i][j] ;}coutendl;}return0;} 题目二灌溉题目描述小蓝负责花园的灌溉工作。

花园可以看成一个 $ n $ 行 $ m $ 列的方格图形。

中间有一部分位置上安装有出水管。

小蓝可以控制一个按钮同时打开所有的出水管打开时有出水管的位置可以被认为已经灌溉好。

每经过一分钟水就会向四面扩展一个方格被扩展到的方格可以被认为已经灌溉好。

即如果前一分钟某一个方格被灌溉好则下一分钟它上下左右的四个方格也被灌溉好。

给定花园水管的位置请问 $ k $ 分钟后有多少个方格被灌溉好输入描述输入的第一行包含两个整数 $ n, m $。

第二行包含一个整数 $ t $表示出水管的数量。

接下来 $ t $ 行描述出水管的位置其中第 $ i $ 行包含两个数 $ r, c $表示第 $ r $ 行第 $ c $ 列有一个排水管。

接下来一行包含一个整数 $ k。

其中 。

其中。

其中1 \leq n, m \leq 100, 1 \leq t \leq 10, 1 \leq k \leq 100 $。

输出描述输出一个整数表示答案。

输入输出样例输入 3 6 2 2 2 3 4 1输出 9✅ 我的代码#includeiostreamusingnamespacestd;constintN105;inta[N][N];intmain(){intm,n;cinmn;for(inti1;im;i){for(intj1;jn;j){a[i][j]0;}}intt;cint;for(inti1;it;i){intx,y;cinxy;a[x][y]1;}intk;cink;for(intminute0;minutek;minute){inttemp[N][N]{0};for(inti1;im;i){for(intj1;jn;j){temp[i][j]a[i][j];}}for(inti1;im;i){for(intj1;jn;j){if(a[i][j]){if(i-

temp[i-1][j]1;if(j-

temp[i][j-1]1;if(i1m)temp[i1][j]1;if(j1n)temp[i][j1]1;}}}for(inti1;im;i){for(intj1;jn;j){a[i][j]temp[i][j];}}}intcount0;for(inti1;im;i){for(intj1;jn;j){counta[i][j];}}coutcount;return0;} 题目三回文日期题目描述2020 年春节期间有一个特殊的日期引起了大家的注意2020 年 2 月 2 日。

因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202恰好是一个回文数。

我们称这样的日期是回文日期。

有人表示 20200202 是 “千年一遇” 的特殊日子。

对此小明很不认同因为不到 2 年之后就是下一个回文日期20211202 即 2021 年 12 月 2 日。

也有人表示 20200202 并不仅仅是一个回文日期还是一个 ABABBABA 型的回文日期。

对此小明也不认同因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期21211212 即 2121 年 12 月 12 日。

算不上 “千年一遇”顶多算 “千年两遇”。

给定一个 8 位数的日期请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。

输入描述输入包含一个八位整数 $ N表示日期。

对于所有评测用例 表示日期。

对于所有评测用例表示日期。

对于所有评测用例10000101 \leq N \leq 89991231 $保证 $ N $ 是一个合法日期的 8 位数表示。

输出描述输出两行每行 1 个八位数。

第一行表示下一个回文日期第二行表示下一个 ABABBABA 型的回文日期。

输入输出样例输入 20200202输出 20211202 21211212运行限制最大运行时间1s最大运行内存256M✅ 我的代码#includeiostreamusingnamespacestd;boolisleap(inty){//判断闰年return(y%40y%100!

||(y%

;//闰年可以被4整除但不能被100整除或能被400整除。

}boolcheck(intyear,intmonth,intday){//判断日期是否合法if(month12||month

returnfalse;if(day

returnfalse;if(month

{if(isleap(year)day

returnfalse;if(!isleap(year)day

returnfalse;}if(month4||month6||month9||month

if(day

returnfalse;returntrue;}intmain(){intn,i;cinn;inta,b,c,d,e,f,g,h;intyear,month,day;boolflagfalse;for(in1;i99999999;i){yeari/10000;monthi%10000/100;dayi%100;ayear/1000;byear/100%10;cyear%100/10;dyear%10;emonth/10;fmonth%10;gday/10;hday%10;if(ahcfbgedflagfalse){//该部分目的是输出第一个回文日期flag作为标记。

//当找到第一个回文日期之后将flag变为true。

这样下一次碰到普通回文日期时就不会输出。

if(check(year,month,day)){coutiendl;flagtrue;}}if(ahcfbgedacbe){//输出ABABBABA型的回文日期if(check(year,month,day)){coutiendl;break;}}}return0;} 我的思考这三道题虽然看起来完全不同但都用了模拟的思想扫雷模拟每个格子的邻居统计过程遍历所有位置对每个非雷格子计算周围雷数。

灌溉模拟水从初始点开始每分钟向四周扩散的过程用temp数组避免当前状态干扰。

回文日期模拟从当前日期往后逐天枚举直到找到满足条件的回文日。

你会发现模拟的本质不是“暴力”而是“还原过程”。

只要你能把问题拆解成“每一步做什么”就能写出正确的代码。

哪怕数据范围大一点只要逻辑正确也能通过。

而且很多高级算法如 BFS、DFS、动态规划都是建立在“模拟”的基础上的。

先学会“一步一步走”才能学会“跳着走”。

总结模拟 ≠ 暴力它是过程还原要清晰理解问题的每一步操作可以用辅助数组避免状态污染如灌溉题枚举 判断 循环 模拟的核心三件套先求正确再求高效如果你也在刷算法题不妨试试今天这三道题用最直白的模拟方法做一遍。

有时候慢一点反而更快。

欢迎在评论区贴出你的解法我们一起交流进步

jmcomic2网页版-jmcomic2网页版应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123