(200616) 코드포스

Codeforces materials usage license (v. 0.1) 에 따라 codeforces.com 의 문제임을 알립니다.

Original problem link: Problem - 1366A - Codeforces

Input

4
4 4
1000000000 0
7 15
8 7

Output

2
0
7
5
3 Likes
1366A
#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
  ios::sync_with_stdio(false); 
  cin.tie(NULL);

  int test_case;
  cin >> test_case;

  while (test_case--) {
    int a, b;

    cin >> a >> b;

    int ans = 0;

    if (a > 2 * b) {
      ans = b;
    } else if ( b > 2 * a) {
      ans = a;
    } else {
      ans = (a + b) / 3;
    }

    cout << ans << endl;
  }
  return 0;
}

1 Like

Codeforces materials usage license (v. 0.1) 에 따라 codeforces.com 의 문제임을 알립니다.

Original problem link: Problem - 1366B - Codeforces

input

3
6 4 3
1 6
2 3
5 5
4 1 2
2 4
1 2
3 3 2
2 3
1 2

output

6
2
3
1 Like

Runtime error 잡다가 졸려서 자러갑니다. :frowning:

1366B Runtime error
#include <algorithm>
#include <iostream>
#include <vector>

#define M_LIMIT 100

using namespace std;

struct Section {
  int min;
  int max;
};

struct Point {
  int pos;
  int sign;

  bool operator<(Point const& rhs) {
    return pos < rhs.pos;
  }
};

int main(int argc, char** argv)
{
  int test_case;
  cin >> test_case;

  while (test_case--) {
    int n, x, m;
    cin >> n >> x >> m;

    vector<Section> sections;
    while (m--) {
      int l, r;
      cin >> l >> r;

      sections.emplace_back(Section{l, r});
    }

    vector<Section> visited_sections;
    for (const auto &section : sections) {
      if ((section.min <= x) && (x <= section.max)) {
        visited_sections.emplace_back(section);
        continue;
      }

      for (const auto &visited_section : visited_sections) {
        if ((visited_section.max < section.min) ||
           (section.max < visited_section.min)) continue;
          
        visited_sections.emplace_back(section);
      }
    }

    if (visited_sections.size() == 0) {
      cout << 1 << endl;
      continue;
    }

    std::vector<Point> points;
    for (const auto &visited_section : visited_sections) {
      points.emplace_back(Point{visited_section.min, 1});
      points.emplace_back(Point{visited_section.max + 1, -1});
    }

    sort(points.begin(), points.end());

    int ans = 0;
    int start_pos = 0;
    int count = 0;
    for (const auto &point : points) {
      if(count == 0) start_pos = point.pos;

      count += point.sign;

      if(count == 0) ans += point.pos - start_pos;
    }

    cout << ans << endl;
  }
  return 0;
}

3 Likes
points.emplace_back(Point{visited_section.min, 1});
points.emplace_back(Point{visited_section.max + 1, -1});

image

points.emplace_back(visited_section.min, 1);
points.emplace_back(visited_section.max + 1, -1);

image

2 Likes

휴 편안.

저도 코드포스 잘하구 싶네유 ㅠㅠ

1 Like

std::endl은 PS에서는 더더욱 쓰면 안되는 것…

1 Like

'\n' 씁시다요

1 Like

오와~~~

1 Like

코드포스 제출하고 체점까지 30분 걸리네요

기다리다 목 빠지는 줄

1366B outersky의 답
#include <iostream>
 
#define max(a,b) (((a)>(b))?(a):(b))
#define min(a,b) (((a)<(b))?(a):(b))
 
using namespace std;
 
 
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
 
	int t;
	cin >> t;
	while (t--) {
		int n, x, m;
		cin >> n >> x >> m;
		
		int left = x,right = x;
		for (int i = 0; i < m; i++) {
			int a, b;
			cin >> a >> b;
			if (b >= left && a <= right)
				left = min(left, a),right = max(right, b);
		}
 
		cout << right - left + 1 << '\n';
		
	}
}
1 Like

@babtul21
흠?! aggregate initialization (2)번 포멧이긴 한데요.
https://en.cppreference.com/w/cpp/language/aggregate_initialization

input 1/2번은 무사 통과하는거 봐서 애매하네요. ㅎㅎ 나중에 봐야겠군요.

재제출 코드
#include <algorithm>
#include <iostream>
#include <vector>
 
using namespace std;
 
struct Section {
  Section(int _min, int _max) : min(_min), max(_max) {}
 
  int min;
  int max;
};
 
struct Point {
  Point(int _pos, int _sign) : pos(_pos), sign(_sign) {}
 
  int pos;
  int sign;
 
  bool operator<(Point const& rhs) {
  return pos < rhs.pos;
}
};
 
int main(int argc, char** argv)
{
  ios::sync_with_stdio(false); 
  cin.tie(NULL);
 
  int test_case;
  cin >> test_case;
 
  while (test_case--) {
    int n, x, m;
    cin >> n >> x >> m;
 
    vector<Section> sections;
    while (m--) {
      int l, r;
      cin >> l >> r;
 
      sections.emplace_back(l, r);
    }
 
    vector<Section> visited_sections;
    for (const auto &section : sections) {
      if ((section.min <= x) && (x <= section.max)) {
        visited_sections.emplace_back(section);
        continue;
      }
 
      for (const auto &visited_section : visited_sections) {
        if ((visited_section.max < section.min) ||
           (section.max < visited_section.min)) continue;
          
        visited_sections.emplace_back(section);
      }
    }
 
    if (visited_sections.size() == 0) {
      cout << 1 << endl;
      continue;
    }
 
    std::vector<Point> points;
    for (const auto &visited_section : visited_sections) {
      points.emplace_back(visited_section.min, 1);
      points.emplace_back(visited_section.max + 1, -1);
    }
 
    sort(points.begin(), points.end());
 
    int ans = 0;
    int start_pos = 0;
    int count = 0;
    for (const auto &point : points) {
      if(count == 0) start_pos = point.pos;
 
      count += point.sign;
 
      if(count == 0) ans += point.pos - start_pos;
    }
 
    cout << ans << endl;
  }
  return 0;
}

@Lukas_J_Han
코포 드릴가시죠~ ㅎㅎ

@frozenca / @jongeon
c++ standard style을 유지하고 싶어서요.
contest 위주로 가야할태니 해보면서 포기 할 것과 하지 않을 것을 명확하게 만들어 나갈 계획입니다.

@sh
~_~

@outersky
오늘 아침에 코포 상태가 좀 안좋더라구요~ 오후까지 그랬나 보네요.
왜 내가 저걸 못보고 어렵게 갔지 싶네요 ㅋㅋ

1 Like

1336A 문제에서
그냥 스틱이랑 다이아몬드 중에 작은걸 다 쓰고 큰 거 남은것들은 버리면 되지 않을까 했는데
마지막에 스틱 8개랑 다이아몬드 7개 여기서 실패하고 멘붕이 왔읍니다 :clown_face: :poop:

1 Like

첫 생각으로 좋습니다!
작은 걸 다 쓰는 것이 최선이 아닌 경우 어떻게 해야 하나를 생각하면 답에 가까워질 수 있습니다 :slight_smile:

1 Like

님 근데 std::endl은 standard고 뭐고 그냥 ps에선 금기예요.
endl이 '\n’넣은다음에 출력버퍼를 아예 비워버리는데 버퍼 비우는게 되게느리거든요
ps에서는 10만줄 가까이 출력하면서 1초안에 돌아야 하는 일도 비일비재한데 이럼 endl쓰다가 진짜 억울하게 터질수도 있어요

1 Like