只有80分,我不理解,急急急

P3654 First Step (ファーストステップ)

``` 当num=1时,横向和竖向是一样的,相当于计算了两次。所以需要特判并输出答案/2。 ``` ``` #include <stdio.h> int n, m; int num; char s[200][200]; int count; void lie(int x, int y, int k); void hang(int x, int y, int k); int main() { scanf("%d %d", &n, &m); scanf("%d", &num); for (int i = 0; i < n; i++) { scanf("%s", s[i]); } for (int i = 0; i < n; i++) { for (int j = 0; j + num - 1 < m; j++) { hang(i, j, 0); } } for (int j = 0; j < m; j++) { for (int i = 0; i + num - 1 < n; i++) { lie(i, j, 0); } } if(num == 1)//特殊判断 { printf("%d", count/2); } else { printf("%d", count); } return 0; } void hang(int x,int y,int k) { if (s[x][y] == '.')k++; else return; if (k == num)count++; else { if (y + 1 < m)hang(x, y + 1, k ); } } void lie(int x, int y, int k) { if (s[x][y] == '.')k++; else return; if (k == num) { count++; } else { if (x + 1 < n) lie(x+1, y , k ); } } ```
by luoyige @ 2022-12-04 11:46:28


是的。
by W121w @ 2022-12-24 21:15:46


@[telankesi](/user/866969) k=1的时候,答案要除以二
by kenyfly @ 2023-02-23 14:41:39


@[kenyfly](/user/940762) 谢谢。
by mooktian @ 2023-02-24 16:25:58


|