360笔试第一题,本地编译没问题,提交AC为0,哭,求大神

import sys
import numpy as np
##读取第一行n,m
line_0 = sys.stdin.readline().strip().split()
list_1 = list(line_0)
n = list_1[0]
m = list_1[1]
list2 = []
o = p = 0

##读取n*m行矩阵
for i in range(int(n)):
    a = list(sys.stdin.readline().strip().split())
    list2.append(a)
#矩阵每行最大值(左右表面积)
for i in range(int(n)):
    b = int(max(list2[i]))
    o =o + b
    
#矩阵每列最大值(前后表面积)
list3 = np.array(list2)
for j in range(int(m)):
    z = int(max(list3[:,j]))
    p += z
##上下表面积
q = int(m)*int(n)
#最终表面积
k = 2*(o+p+q)

print(k)


#360公司##笔试题目#
全部评论
找最大值干嘛呀。。 表面积只要上下左右前后扫描6次就好了,上下是固定的就不用扫描了, 每个竖条方块记录一下比上下左右高的部分就好了 tmp =[int(x) for x in input().split()]  M,N = tmp[0],tmp[1] data = [] data.append([0 for _ in range(N+2)]) for i in range(M):     tmp = []     tmp.append(0)     tmp.extend([int(x) for x in input().split()])     tmp.append(0)     data.append(tmp) data.append([0 for i in range(N+2)]) base = M*N*2 for i in range(1,M+1):     for j in range(1,N+1):         long = 0         long += max(0,data[i][j]-data[i-1][j])         long += max(0,data[i][j]-data[i+1][j])         long += max(0,data[i][j]-data[i][j-1])         long += max(0,data[i][j]-data[i][j+1])         base+=long print(base)
点赞 回复 分享
发布于 2019-08-15 21:27
思路:总的立方体个数*6 - 重叠个数*2 从左到右,从前到后的顺序考虑重叠,这样不会重复也不会漏 if __name__ == "__main__":     N, M =map(int, input().split())     loc = []     area = 0     for _ in range(N):         tmp = list(map(int, input().split()))         area += sum(tmp)         loc.append(tmp)     area *= 6     sub = 0     for i in range(N):         for j in range(M):             if loc[i][j] > 1:                 sub += (loc[i][j]-1)*2             if j > 0:                 sub += min(loc[i][j-1], loc[i][j])*2             if i > 0:                 sub += min(loc[i-1][j], loc[i][j])*2     print(area - sub)
点赞 回复 分享
发布于 2019-08-15 21:27
和我思路一样。。。
点赞 回复 分享
发布于 2019-08-15 21:11
形状会起伏,例如31123112这样的侧面积远不止3+3了
点赞 回复 分享
发布于 2019-08-15 21:13
我也是这个思路 为什么过不了
点赞 回复 分享
发布于 2019-08-15 21:22
中间凹进去就不对了
点赞 回复 分享
发布于 2019-08-15 21:24
private static int solution(int[][] data, int n, int m) {         int res = 0;         //上下面固定         res += n * m * 2;         //第一层前后左右固定         //res += 8; 我tm把它写死了 没变成下面的         res += m * 2 + n * 2;         for (int i = 0; i <n ; i++) {             for (int j = 0; j <m ; j++) {                 int the_cur = data[i][j] - 1;//除去第一层当前位置的正方体个数                 int the_left_cur = j == 0 ? 0 : data[i][j-1] - 1;//除去第一层当前位置的左边正方体个数                 int the_right_cur = j == m-1 ? 0 : data[i][j+1] - 1;//除去第一层当前位置的左边正方体个数                 int the_up_cur = i == 0 ? 0 : data[i-1][j] - 1;//除去第一层当前位置的前边正方体个数                 int the_down_cur = i == n-1 ? 0 : data[i+1][j] - 1;//除去第一层当前位置的后边正方体个数                 //当前立方体前后左右增加的表面积                 int the_left_cur_cut = the_left_cur >= the_cur ? 0 : the_cur - the_left_cur;                 int the_right_cur_cut = the_right_cur >= the_cur ? 0 : the_cur - the_right_cur;                 int the_up_cur_cut = the_up_cur >= the_cur ? 0 : the_cur - the_up_cur;                 int the_down_cur_cut = the_down_cur >= the_cur ? 0 : the_cur - the_down_cur;                 int the_real_cur_area = the_left_cur_cut + the_right_cur_cut + the_up_cur_cut + the_down_cur_cut;                 res += the_real_cur_area;             }         }         return res;     }
点赞 回复 分享
发布于 2019-08-15 21:25
写一下思路: 类似于动态规划从左上角走到左下角思路:建一张dp表,a中存每个位置的立方体的个数,dp[i][j]表示在i j位置上加入a[i][j]之后带来的面数的增加量,从左往右,从上往下遍历的话,更新dp[i][j]只用看左边和上边有没有立方体。如果a[i][j] = 0, d[i][j]=0, 如果不等于0,那么增加的面就是不考虑遮挡的面数目减去左边和上面遮挡面的两倍。将dp表里面的所有数求和就是总了
点赞 回复 分享
发布于 2019-08-15 22:14
第一题是坑,题目说1<=Aij<=100, 结果设置了Aij为0的测试用例
点赞 回复 分享
发布于 2019-08-15 22:23
我觉得可以按位置去思考,对于每一个位置grid[i][j](假设其值为v)如果v大于0,则这个i,j位置必然会为整个立体的表面积贡献一个上面和下面;然后遍历它的合法四周grid[i'][j'](假设其值为neighbor)则这个i,j位置会为整个立体的表面积贡献max(v - neighbor, 0)个侧面。时间复杂度m*n。代码如下: public static void main(String[] args)  {         int n = sc.nextInt();         int m = sc.nextInt();         int[][] grid = new int[n][m];         for(int i=0;i < n; i++){             for(int j=0; j < m; j++){                 grid[i][j]  = sc.nextInt();             }         }         int[] dx = new int[]{-1,0,1,0};         int[] dy = new int[]{0,1,0,-1};         int ans = 0;         for (int r = 0; r < n; ++r)             for (int c = 0; c < m; ++c)                 if (grid[r][c] > 0) {                     ans += 2;                     for (int k = 0; k < 4; ++k) {                         int nr = r + dx[k];                         int nc = c + dy[k];                         int nv = 0;                         if (0 <= nr && nr < n && 0 <= nc && nc < m)                             nv = grid[nr][nc];                         ans += Math.max(grid[r][c] - nv, 0);                     }                 }         System.out.println( ans );     }
点赞 回复 分享
发布于 2019-08-15 23:08
这个思路不对啊 因为中间有可能凹进去,表面积增大了 但是只算最大值是默认是个凸多面体。测试用例比较简单的话确实只能考虑到凸多面体的情况
点赞 回复 分享
发布于 2019-08-15 23:13
能用numpy么???我之前在牛客上不能用numpy, 会提示语法错误
点赞 回复 分享
发布于 2019-08-16 16:20

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
伟大的烤冷面被普调:暨大✌🏻就是强
点赞 评论 收藏
分享
评论
点赞
6
分享
正在热议
# 25届秋招总结 #
440109次浏览 4488人参与
# 春招别灰心,我们一人来一句鼓励 #
41383次浏览 524人参与
# 北方华创开奖 #
107267次浏览 599人参与
# 地方国企笔面经互助 #
7916次浏览 18人参与
# 虾皮求职进展汇总 #
113709次浏览 881人参与
# 实习,投递多份简历没人回复怎么办 #
2453743次浏览 34846人参与
# 阿里云管培生offer #
119708次浏览 2219人参与
# 实习必须要去大厂吗? #
55563次浏览 960人参与
# 同bg的你秋招战况如何? #
75265次浏览 549人参与
# 提前批简历挂麻了怎么办 #
149784次浏览 1977人参与
# 投递实习岗位前的准备 #
1195605次浏览 18546人参与
# 你投递的公司有几家约面了? #
33170次浏览 188人参与
# 双非本科求职如何逆袭 #
661802次浏览 7394人参与
# 机械人春招想让哪家公司来捞你? #
157587次浏览 2267人参与
# 如果公司给你放一天假,你会怎么度过? #
4717次浏览 54人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11266次浏览 263人参与
# 发工资后,你做的第一件事是什么 #
12368次浏览 61人参与
# 工作中,努力重要还是选择重要? #
35546次浏览 384人参与
# 参加完秋招的机械人,还参加春招吗? #
20072次浏览 240人参与
# 实习想申请秋招offer,能不能argue薪资 #
39211次浏览 314人参与
# 我的上岸简历长这样 #
451881次浏览 8088人参与
# 非技术岗是怎么找实习的 #
155832次浏览 2120人参与
牛客网
牛客企业服务