大家好,欢迎来到IT知识分享网。
学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
小猴和朋友正在玩一个游戏,初始时,在一个 n×m 的棋盘上放置着 n×m 个棋子,每枚棋子都有一定的价值,第 i(1≤i≤n) 行第 j(1≤j≤m) 列的棋子的价值为 vi,j。
该游戏的规则为:在棋盘中任意选取两个正方形区域(第 k(1≤k≤2) 个正方形的左上角格子在第 xk 行第 yk 列,边长为 lenk),要求双方玩家使用最短的时间计算出这两个正方形区域中的总价值,谁先计算出正确结果,本局游戏就是谁获胜。
现在小猴想要知道,在他制定的规则下,游戏一共进行 q 局,每局游戏的正确结果是多少,以便于用来核对双方玩家计算出的结果是否正确。
【输入】
第一行,包含两个整数 n,m。
接下来 n 行,每行包含 m 个整数 vi,1,vi,2,…,vi,m。
接下来一行,包含一个整数 q。
接下来 q 行,每行包含 6 个整数 x1,y1,len1,x2,y2,len2。
【输出】
共 t 行,每行一个整数,表示答案。
【输入样例】
2 2
1 2
3 4
3
1 1 1 2 2 1
1 2 1 2 1 1
2 1 1 2 2 1
【输出样例】
5
5
7
【代码详解】
#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 810, M = 810;int n, m, q;LL s[N][M];int main(){ cin >> n >> m; for (int i=1; i<=n; i++) { for (int j=1; j<=m; j++) { cin >> s[i][j]; s[i][j] += s[i][j-1]; } } cin >> q; while (q--) { int x1, y1, len1, x2, y2, len2; cin >> x1 >> y1 >> len1 >> x2 >> y2 >> len2; int x3 = x1 + len1 - 1, y3 = y1 + len1 - 1; int x4 = x2 + len2 - 1, y4 = y2 + len2 - 1; LL res = 0; for (int i=x1; i<=x3; i++) { res += s[i][y3] - s[i][y1-1]; } for (int i=x2; i<=x4; i++) { res += s[i][y4] - s[i][y2-1]; } if (!(x3<x2 || x4<x1 || y3<y2 || y4<y1)) { int x[] = {x1, x2, x3, x4}; int y[] = {y1, y2, y3, y4}; sort(x, x+4); sort(y, y+4); for (int i=x[1]; i<=x[2]; i++) { res -= s[i][y[2]] - s[i][y[1]-1]; } } cout << res << endl; } return 0;}
【运行结果】
3 4
1 2 3 4
-1 -2 -3 -4
6 7 -6 -7
3
1 1 2 2 3 2
-20
1 1 3 2 2 1
7
1 1 2 2 2 2
-2
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/57827.html