题目描述
某次无聊中, atm 发现了一个很老的程序。这个程序的功能类似于 Excel ,它对一个表格进行操作。
不妨设表格有 n 行,每行有 m 个格子。
每个格子的内容可以是一个正整数,也可以是一个公式。
公式包括三种:

  1. SUM(x1,y1:x2,y2) 表示求左上角是第 x1 行第 y1 个格子,右下角是第 x2 行第 y2 个格子这个矩形内所有格子的值的和。
  2. AVG(x1,y1:x2,y2) 表示求左上角是第 x1 行第 y1 个格子,右下角是第 x2 行第 y2 个格子这个矩形内所有格子的值的平均数。
  3. STD(x1,y1:x2,y2) 表示求左上角是第 x1 行第 y1 个格子,右下角是第 x2 行第 y2 个格子这个矩形内所有格子的值的标准差。

标准差即为方差的平方根。
方差就是:每个数据与平均值的差的平方的平均值,用来衡量单个数据离开平均数的程度。

公式都不会出现嵌套。

如果这个格子内是一个数,则这个格子的值等于这个数,否则这个格子的值等于格子公式求值结果。

输入这个表格后,程序会输出每个格子的值。atm 觉得这个程序很好玩,他也想实现一下这个程序。
输入
第一行两个数 n, m 。
接下来 n 行输入一个表格。每行 m 个由空格隔开的字符串,分别表示对应格子的内容。
输入保证不会出现循环依赖的情况,即不会出现两个格子 a 和 b 使得 a 的值依赖 b 的值且 b 的值依赖 a 的值。

输出
输出一个表格,共 n 行,每行 m 个保留两位小数的实数。
数据保证不会有格子的值超过 1e6 。
样例输入
3 2
1 SUM(2,1:3,1)
2 AVG(1,1:1,2)
SUM(1,1:2,1) STD(1,1:2,2)
样例输出
1.00 5.00
2.00 3.00
3.00 1.48
思路:其实这个题目看着比较麻烦,但是思路还是比较好想的。我们利用字符串二维数组先储存起来,然后对于那些没有直接给出的数值,递归去求。求出来之后就将结果保存,以免重复求。
代码如下:

#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define mem(a,b,c) for(int i=1;i<=b;i++) for(int j=1;j<=b;j++) a[i][j]=-1.0;
using namespace std;const int maxx=101;
string s[maxx][maxx];
double ans[maxx][maxx];
int a[5];
int n,m;inline double getval(int x,int y)
{string t=s[x][y];if(ans[x][y]!=-1.0) return ans[x][y];if(t[0]>='0'&&t[0]<='9'){double sum=0.0;for(int i=0;i<t.length();i++) sum=sum*10.0+(t[i]-'0');return ans[x][y]=sum;}int num=0,j;memset(a,0,sizeof(a));for(int i=0;i<t.length();){if(t[i]>='0'&&t[i]<='9'){j=i;while(j<t.length()&&t[j]>='0'&&t[j]<='9') a[num]=a[num]*10+(t[j++]-'0');i=j;num++;}else i++;}double sum=0; for(int i=a[0];i<=a[2];i++)for(int j=a[1];j<=a[3];j++)sum+=getval(i,j);if(t[1]=='U') return ans[x][y]=sum;else if(t[1]=='V') return ans[x][y]=sum/(double)((a[2]-a[0]+1)*(a[3]-a[1]+1));else{double avg=sum/(double)((a[2]-a[0]+1)*(a[3]-a[1]+1));double ans1=0.0;for(int i=a[0];i<=a[2];i++)for(int j=a[1];j<=a[3];j++){double xx=getval(i,j);ans1+=(xx-avg)*(xx-avg);}return ans[x][y]=sqrt(ans1/(double)((a[2]-a[0]+1)*(a[3]-a[1]+1)));}
}
int main()
{scanf("%d%d",&n,&m);mem(ans,n,m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) cin>>s[i][j];for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) ans[i][j]=getval(i,j);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) printf("%.2lf%c",ans[i][j],j==m?'\n':' ');return 0;
}


努力加油a啊,(o)/~

[蓝桥杯][2015年第六届真题]表格计算(递归+记忆化)相关推荐

  1. 问题 1825: [蓝桥杯][2015年第六届真题]穿越雷区

    问题 1825: [蓝桥杯][2015年第六届真题]穿越雷区 时间限制: 1Sec 内存限制: 128MB 提交: 310 解决: 211 题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区 ...

  2. [蓝桥杯][2015年第六届真题]生命之树(树形dp)

    题目描述 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值. 上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都 ...

  3. [蓝桥杯][2015年第六届真题]密文搜索(排序+二分)

    题目描述 福尔摩斯从X星收到一份资料,全部是小写字母组成. 他的助手提供了另一份资料:许多长度为8的密码列表. 福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的. 请你编写一个程序,从第一份资料 ...

  4. [蓝桥杯][2015年第六届真题]机器人塔(DFS)

    题目描述 X星球的机器人表演拉拉队有两种服装,A和B. 他们这次表演的是搭机器人塔. 类似: A B B A B A A A B B B B B A B A B A B B A 队内的组塔规则是: A ...

  5. [蓝桥杯][2015年第六届真题]穿越雷区

    文章目录 题目描述 输入 输出 样例输入 样例输出 c语言AC代码 题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去( ...

  6. 蓝桥杯2015年第六届真题-穿越雷区

    题目 题目链接 题解 BFS模板题. 就在模板题的基础上稍微加了点限制而已. 我用的是pair存的,first表示位置,将二维压缩成一维了:second表示步数: 要求正负交替,我就采用异或的思想进行 ...

  7. 蓝桥杯2015年第六届真题——穿越雷区(C/C++)

    穿越雷区 一.题目内容 题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废.某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征) ...

  8. [蓝桥杯][2016年第七届真题]密码脱落(记忆化搜索)

    题目描述 X星球的考古学家发现了一批古代留下来的密码. 这些密码是由A.B.C.D 四种植物的种子串成的序列. 仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串). 由于年代久远,其 ...

  9. 蓝桥杯2015年第六届C/C++ B组省赛习题题解

    目录 第一题:奖券数目 第二题:星系炸弹(日期计算) 第三题:三羊献瑞(全排列) 第四题:格子中输出 第五题:九数组分数(dfs) 第六题:加法变乘法(枚举) 第七题:牌型种数(dfs+dp) 第八题 ...

最新文章

  1. 黑科技抗疫,Python开发者大集结!
  2. cocos2dx 3.3 异步加载纹理
  3. python-opencv3 kmeans图像分类
  4. python下载超链接文件-如何使用python从docx文件中提取超链接中的url
  5. DL之VGGNet:VGGNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  6. MTM:matlab实现4主函数
  7. 【PAT甲级 一个字符数组是否被另一个包含】1092 To Buy or Not to Buy (20 分) C++
  8. 数据结构四——散列表(下)
  9. Android设计模式之——访问者模式
  10. python打开word后再关闭再打开出错_用Python写了个程序调用word,运行完后再手动打开word文档就变慢了,这是为啥?...
  11. 典型案例:Bug 9776608-多个用户使用错误密码登录同一个用户而造成的用户无法登录异常...
  12. java文件选择器_java中文件选择器JFileChooser的用法
  13. ES6小实验-复习字符串
  14. 编程语言中,取余和取模的区别到底是什么?
  15. 超图s3m服务加载时添加token
  16. java代码对图片缩放
  17. 【python】Python学到什么程度可以面试工作(解答一)
  18. 51单片机之系统指令
  19. 正则表达式-匹配中英文、字母和数字
  20. 请编写函数实现自然底数 e=2.718281828

热门文章

  1. 总结了C#中string.format用法。分享给大家供大家参考。具体分析如下:
  2. IOS15之Swift5.5的KVC报错以及JSON转字典转模型
  3. XCode的使用心得
  4. linux c 符号表,C中的符号表
  5. java io读取文件夹_JavaIO利用迭代读取文件夹所有目录及文件
  6. python实现傅里叶变换求幅值和相位_Python 实现图像快速傅里叶变换和离散余弦变换...
  7. android开发之EditText金额输入只能两位小数点
  8. linux内核模块配置,如何为linux内核模块开发配置clang_complete?
  9. 鸿蒙系统天气,墨迹天气携手鸿蒙系统 以精细化气象服务助力全场景生态建设...
  10. MQ产品比较-ActiveMQ-RocketMQ