검색결과 리스트
정보 올림피아드에 해당되는 글 3건
- 2019.01.26 [KOI]전국본선 2013 중등부 두번째 문제
- 2019.01.26 [KOI]전국본선 2013 중등부 첫번째 문제
- 2019.01.26 [KOI]전국본선 2012 중등부 첫번째 문제
글
[KOI]전국본선 2013 중등부 두번째 문제
KOI (정보올림피아드) 기출 풀이
2019. 1. 26. 15:05
#include <stdio.h> int main() { int n; int after[30] = { 0, }, before[30] = { 0, }; scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%d", &after[i]); } int cur = 0, count = 0; while (count < n) { while (before[cur] != 0) { cur = (cur + 1) % n; } before[cur] = after[count++]; cur = (before[cur] + cur) % n; } printf("%d\n", n); for (int i = 0; i < n; ++i) { printf("%d ", before[i]); } return 0; }
글
[KOI]전국본선 2013 중등부 첫번째 문제
KOI (정보올림피아드) 기출 풀이
2019. 1. 26. 14:53
#include <stdio.h> #include <algorithm> #include <vector> using namespace std; struct ANIMAL { int y, x; }; vector<int> hunter; vector<animal> animal; bool comp(const ANIMAL& a, const ANIMAL& b) { return (a.x < b.x); } bool is_kill(const ANIMAL& a, const int h, const int len) { int dist = abs(a.x - h) + a.y; if (dist <= len) return true; else return false; } int main() { int M, N, L; scanf("%d %d %d", &M, &N, &L); hunter.resize(M); animal.resize(N); for (int i = 0; i < M; ++i) { scanf("%d", &hunter[i]); } for (int i = 0; i < N; ++i) { scanf("%d %d", &animal[i].x, &animal[i].y); } sort(hunter.begin(), hunter.end()); sort(animal.begin(), animal.end(), comp); int ret = 0; for (auto ani : animal) { auto target = lower_bound(hunter.begin(), hunter.end(), ani.x) - hunter.begin(); if (is_kill(ani, hunter[target], L)) { ++ret; } else { if (target > 0) { --target; if (is_kill(ani, hunter[target], L)) { ++ret; } } } } printf("%d\n", ret); return 0; }
글
[KOI]전국본선 2012 중등부 첫번째 문제
KOI (정보올림피아드) 기출 풀이
2019. 1. 26. 14:45
#include <stdio.h> #include <algorithm> using namespace std; int n, money; int city[10000]; bool valid(int mid) { int ret = 0; for (int i = 0; i < n; ++i) { ret += min(mid, city[i]); } return (ret <= money); } int main() { int left = 0, right = 0; scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%d", &city[i]); right = max(right, city[i]); } scanf("%d", &money); while (left != right) { int mid = (left + right + 1) / 2; if (valid(mid)) { left = mid; } else { right = mid - 1; } } printf("%d\n", left); return 0; }