这题样例有一些感觉越界了,代码问题出哪我看不出来
查看原帖
这题样例有一些感觉越界了,代码问题出哪我看不出来
1120844
haluyaoac楼主2024/7/24 16:20
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
const int len = 32;
const int maxn = 100000 + 10;
char s[maxn];
int buf[maxn], cnt;
int p = 0;
int shuchu[100],pl=0;

// 把字符串s[p..]导出到以(r,c)为左上角,边长为w的缓冲区中
// 2 1
// 3 4
void draw(int n,int& p) {
  char ch = s[p++];
  if(ch == 'p'&&buf[n]!=2) {
      buf[n] = 1;
      draw(4*n+1,p); // 1
      draw(4*n+2,p); // 2
      draw(4*n+3,p); // 3
      draw(4*n+4,p); // 4
  } 
  else if(ch == 'f') { // 画黑像素(白像素不画)
      buf[n] = 2;
  }
}

void dfs(int i,int g) {
    for (int j = 1; j <= 4; j++) {
        if (buf[4 * i + j] == 0) { continue; }
        else if (buf[4 * i + j] == 2) { cnt += pow(4, 5 - g); }
        else {
            dfs(4 * i + j,g+1);
        }
    }
}

int main() {
  int T;
  scanf_s("%d", &T,1);
  while(T--) {
    memset(buf, 0, sizeof(buf));
    cnt = 0;
    for(int i = 0; i < 2; i++) {
      scanf_s("%s", s,1024);
      p = 0;
      draw(0,p);
    }
    if (buf[0] == 1)dfs(0, 1);
    else if (buf[0] == 0)cnt += 0;
    else cnt += 1024;
    shuchu[pl++] = cnt;
    printf("There are %d black pixels.\n", cnt);
  }
  for (int i = 0; i < pl; i++) {
      printf("There are %d black pixels.\n", shuchu[i]);
  }
  return 0;
}

在udebug的样例中有一个:

pppfepfpefepeepffepefeeffefpfeeppppefpfeeepeeffppeffefpeeffffepefppefeefpeeeepefefeppefpefffpffeffffpepffeeffpfpeeppeeeefpeefeefefeefppeeefefpeffeeef
peefe

这里你手画一下不是越界了吗,我不理解,我的代码怎么看都感觉没啥问题,求dalao帮助。

2024/7/24 16:20
加载中...