-
1577알고리즘/acmicpc 2015. 10. 16. 22:17
아 도로문제 ㅠㅠ
예전부터 이상하게 틀리던 문젠데 오늘 풀었는데 또 틀렸다. 대체 뭐가 문제인가 해서 친구한테 물어봤더니 장애물 저장방식에 문제가 있다고 했다...
사실 이문제는 별로 어려운 문제는 아닌데말이다...
내 실수는 0 0 0 1 1 0 1 1 이면 0 0 에서 1 0 은 장애물이 없는데 장애물이 있는것으로 인식한다는 것이다...
괜히 인접행렬 형태로 간소화해서 풀어보겠다고 했다가 틀렸다. 기하학 문제에선 여러가지 경우를 동시에 생각했어야 하는데 크으... 생각하지 못했다. 반성할 부분이다.
#include<cstdio> using namespace std; struct obstacle{ int ax, ay; int bx, by; }; long long map[105][105]; obstacle obs[105]; int main(){ int n, m, k; int a, b, c, d; scanf("%d %d", &n, &m); scanf("%d", &k); for(int i=0; i<k; i++){ scanf("%d %d %d %d", &obs[i].ax, &obs[i].ay, &obs[i].bx, &obs[i].by); } map[0][0]=1; for(int i=0; i<=n; i++) for(int j=0; j<=m; j++){ bool up=true, left=true; for(int piv=0; piv<k; piv++){ if(i>0){ if(i-1 == obs[piv].ax && j==obs[piv].ay && i==obs[piv].bx && j==obs[piv].by) up=false; if(i-1 == obs[piv].bx && j==obs[piv].by && i==obs[piv].ax && j==obs[piv].ay) up=false; }else up=false; if(j>0){ if(i == obs[piv].ax && j-1==obs[piv].ay && i==obs[piv].bx && j==obs[piv].by) left=false; if(i == obs[piv].bx && j-1==obs[piv].by && i==obs[piv].ax && j==obs[piv].ay) left=false; } else left=false; } if(up) map[i][j] += map[i-1][j]; if(left) map[i][j] += map[i][j-1]; } printf("%lld\n",map[n][m]); return 0; }