总结可能出现的错误&hack数据
  • 板块P1174 打砖块
  • 楼主_shining
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/7/31 16:56
  • 上次更新2025/7/31 21:29:41
查看原帖
总结可能出现的错误&hack数据
792535
_shining楼主2025/7/31 16:56

50pts50pts

可能是辅助数组 sy,snsy,sn 的更新方式出现问题,也可能你只打了 50pts50pts 的部分分,比如:

#define rep(i, j, k) for(int i = j; i <= k; i++)
#define rop(i, j, k) for(int i = j; i >= k; i--)
rep(i, 1, m){
  int cnt = 0;
  rep(j, 1, n){
    if(a[j][i].ch == 'Y') sy[i][cnt] += a[j][i].val;
    else{
      cnt++;
      sy[i][cnt] = sy[i][cnt - 1] + a[j][i].val;
      sn[i][cnt] = sy[i][cnt - 1] + a[j][i].val;	
    }
  }
}

但是我们是从下面开始打砖块的,所以 jj 应该从 nn11 枚举。

70pts70pts:没有考虑 Y\texttt{Y}N\texttt{N} 的打法,遇见 Y\texttt{Y} 可能就直接打了,数据:

hack 数据 from here

3 2 4
2 Y 1 Y
1 N 1 N
1 N 1 N
6

80pts80pts:辅助数组 sy,snsy,sn 的更新方式出现问题,如:

#define rep(i, j, k) for(int i = j; i <= k; i++)
#define rop(i, j, k) for(int i = j; i >= k; i--)
rep(i, 1, m){
  int cnt = 0;
  rop(j, n, 1){
    if(a[j][i].ch == 'Y') sy[i][cnt] += a[j][i].val;
    else{
      cnt++;
      sy[i][cnt] = sy[i][cnt - 1] + a[j][i].val;
      sn[i][cnt] = sn[i][cnt - 1] + a[j][i].val;	
    }
  }
}

snsn 数组记录的是打最后一颗,所以只能从不是打最后一颗的 sysy 数组转移,所以改为:sn[i][cnt] = sy[i][cnt - 1] + a[j][i].val; 即可。

hack 数据 from here

3 3 3
1 Y 1 Y 1 Y
1 N 1 N 1 N
1 Y 1 Y 1 Y
8
2025/7/31 16:56
加载中...