#include <stdio.h> int x[100]={0}, y[100]={0}; //x:가로 점선 y:세로 점선 int x_c=0, y_c=0; //가로 점선 개수, 세로 점선 개수 int line(void); //오름차순 정렬 int x_max(int n); //가로길이 최대 int y_max(int m); //세로길이 최대 int main(void) { int n, m, l, i, a; scanf(" %d %d", &n, &m); //가로, 세로 길이 scanf(" %d", &l); //점선의 개수 for(i=0; i<l; i++) { scanf(" %d", &a); if(a==0) //가로 점선 { scanf(" %d", &x[x_c++]); } else //세로 점선 { scanf(" %d", &y[y_c++]); } } line(); printf("%d", x_max(n)*y_max(m)); return 0; } int line(void) { int i, j, temp, min; for(i=0; i<(x_c-1); i++) { min=i; for(j=i+1; j<x_c; j++) { if(x[min]>x[j]) min=j; } if(min!=i) { temp=x[i]; x[i]=x[min]; x[min]=temp; } } for(i=0; i<(y_c-1); i++) { min=i; for(j=i+1; j<y_c; j++) { if(y[min]>y[j]) min=j; } if(min!=i) { temp=y[i]; y[i]=y[min]; y[min]=temp; } } } int x_max(int n) { if(y_c==0) //세로 점선이 없을 경우 return n; int i, max=0, a; for(i=0; i<=y_c; i++) { if(i==0) a=y[i]; else if(i==y_c) a=n-y[i-1]; else a=y[i]-y[i-1]; if(max<a) max=a; } return max; } int y_max(int m) { if(x_c==0) //가로 점선이 없을 경우 return m; int i, max=0, a; for(i=0; i<=x_c; i++) { if(i==0) a=x[i]; else if(i==x_c) a=m-x[i-1]; else a=x[i]-x[i-1]; if(max<a) max=a; } return max; }
2018.06.23 12:09
정올 - 문제은행 - 종이 자르기(1067)
조회 수 255 추천 수 0 댓글 0