알고리즘/acmicpc
1577
kwony
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;
}