Submission #202308

#TimeUsernameProblemLanguageResultExecution timeMemory
202308wjdqhdhfflavldkem12곡선 자르기 (KOI17_cut)C++14
100 / 100
430 ms24160 KiB
#include <stdio.h> #include <vector> #include <algorithm> #include <limits.h> using namespace std; #define LEFT 0 #define RIGHT 1 #define node pair<int, bool> int n, ansCount, inPeak, outPeak; vector<int> x, y; vector<node> LIST; bool compare(node a, node b){ return a.first < b.first; } int main(){ int i; /*변수입력*/ //꼭짓점의 개수 입력 scanf("%d", &n); //각 꼭짓점의 x, y좌표 입력 & 왼쪽 아래에 위치한 점으로 기준점으로 지정할 점을 찾는다. int xtemp, ytemp, start, xstart = INT_MAX, ystart = INT_MAX; for (i = 0; i < n; i++){ scanf("%d %d", &xtemp, &ytemp); x.push_back(xtemp); y.push_back(ytemp); if (ytemp <= ystart && xtemp <= xstart && ytemp < 0){ start = i; xstart = xtemp; ystart = ytemp; } } // 시작지점 이전의 점들을 시작지점 이후로 옮겨 붙인다. for (i = 0; i < start; i++){ x.push_back(x[i]); y.push_back(y[i]); } /*봉우리의 시작 기둥과 끝기둥을 찾아 입력한다.*/ //두 개의 기둥을 왼쪽 기둥과 오른쪽 기둥으로 구분하여 입력한다. int size = 0; pair<int, int> temp; for (i = start; i < n+start-1; i++){ if (y[i]<0 && y[i + 1]>0){ size++; temp.first = i; } else if (y[i]>0 && y[i + 1] < 0){ size++; temp.second = i; if (x[temp.first] < x[temp.second]){ LIST.push_back(node(x[temp.first], LEFT)); LIST.push_back(node(x[temp.second], RIGHT)); } else{ LIST.push_back(node(x[temp.first], RIGHT)); LIST.push_back(node(x[temp.second], LEFT)); } } } /*입력된 기둥을 x좌표를 기준으로 오름차순 정렬한다.*/ sort(LIST.begin(), LIST.end(), compare); /*기둥의 배치를 이용하여 원하는 봉우리의 개수를 찾는다.*/ for (i = 0; i < size; i++){ if (LIST[i].second == LEFT){ ansCount++; } else{ ansCount--; if (ansCount == 0) outPeak++; if (LIST[i - 1].second == LEFT) inPeak++; } } /*표준출력에 맞추어 출력한다.*/ printf("%d %d\n", outPeak, inPeak); return 0; }

Compilation message (stderr)

cut.cpp: In function 'int main()':
cut.cpp:25:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &n);
  ~~~~~^~~~~~~~~~
cut.cpp:29:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", &xtemp, &ytemp);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
cut.cpp:27:20: warning: 'start' may be used uninitialized in this function [-Wmaybe-uninitialized]
  int xtemp, ytemp, start, xstart = INT_MAX, ystart = INT_MAX;
                    ^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...