문제를 요약해보면 세개의 수를 정했을 때중위값과 평균값의 차이가 최대가 되도록 하고 그 값의 3배를 출력하면 된다! 우리는 수학적으로 문제에 접근해야 한다세 수를 a,b,c라고 하자 (a a를 고정시키기 고정시키고 돌면 최대 20만번이면 확인가능하다! 소스코드12345678910111213141516#include #include #include using namespace std;#define ll long longll n, arr[100010]; int main() { scanf(" %lld", &n); for (int i = 0; i
내리 갈굼 2번째 문제이다이번엔 쿼리를 날려주는데 한 노드의 상태를 출력해야한다트리를 세그먼트 트리로 만들 수 있다면lazy를 써서 쉽게 풀 수 있다! 소스코드123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778#include #include #include #include using namespace std;const int MAXN = 1e5 + 5;int p[MAXN], num[MAXN], cnum[MAXN],cnt;bool check[MAXN];vector Graph;int dfs(int ..
문제를 해석하면 직속 상사에게 혼나면 아래도 다 혼난다그 때 모두가 혼난 정도를 출력하면 된다 트리로 구성되기 때문에 혼나는 정도를 미리 저장해두고dfs를 돌리며 자식들에게 값을 물려주면 된다 처음에 순서대로 방문한다고 혼자 착각해서 한번 틀렸다 ㅎㅎ.. 소스코드1234567891011121314151617181920212223242526272829303132333435#include #include #include using namespace std;const int MAXN = 1e5 + 5;int n, m;vector Graph;int cost[MAXN];bool check[MAXN];int ans[MAXN];void dfs(int x,int sum) { check[x] = true; int c =..
IUPC 기출 문제다세그먼트트리 + lazy를 쓰는문제 한가지 걸리는게 있다면 트리를 세그먼트트리로 바꿔야 한다는 것..!말로만 들었지 해본적이 없어서 찾아서 공부하며 풀어봤다 후위순회를 돌리고 (내위치-자식수) ~ 내위치 로 구간을 정해주면 된다!그럼 자식들 모두 업데이트를 시켜줄 수 있다 그것만 한다면 기본적인 lazy문제로 바뀐다! 소스코드123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990#include #include #include #inclu..
Bessis와 Elsie가 카드게임을 한다카드는 1~N*2까지 있고 그 중 입력으로 주어지는 N개를 Elsie가 가지고 있다게임의 규칙은 이렇다 Elsie는 입력 순으로 카드를 낸다처음 N/2판 까지는 카드 숫자가 큰 사람이 이긴다나머지는 숫자가 작은 사람이 이긴다 카드를 반반 쪼개서 upper_bound를 하면 답을 찾을 수 있다!처음에는 엘씨의 앞쪽카드 N/2개와 베씨의 뒤쪽카드 N/2그 다음에는 반대로 하면 된다 소스코드1234567891011121314151617181920212223242526272829303132333435363738#include #include #include #include using namespace std;int n;bool used[100005];int main() ..
삼성 SW 역량테스트에 나온 문제다비트를 통해 완전탐색을 하면 답을 구할 수 있다치킨집과 집을 미리 vt에 따로 담아두고 for문을 돌리며 bit가 m개 체크된다면 지금 체크된 치킨집과 집들과의 최소거리를 다 구해보면 된다! 소스코드12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849#include #include #include #include using namespace std;int map[55][55], n, m,ccnt;vector chi, home; int dist(int x1, int y1, int x2, int y2) { return abs(x1 - x2) + abs(y1 - y2);..
백트래킹으로 완탐을 이용하는 기본문제!6개의 숫자가 다 모이면 출력해주자~! 소스코드1234567891011121314151617181920212223#include #include using namespace std;int arr[50],k,n;void go(vector& vt,int pos) { if (vt.size() == 6) { for (int i = 0; i n) return; vt.push_back(arr[pos]); go(vt, pos + 1); vt.pop_back(); go(vt, pos + 1);}int main() { while (scanf(" %d", &n)) { if (n == 0) return 0; for (int i = 1; i
BIT를 이용해 풀 수 있는 문제다 int 형은 4byte = 32bit 이므로 1bit에 숫자 하나를 표현한다고 치면 32개의 숫자를 표현 가능하다 32 = 2^5 이고 숫자가 2^25 까지 들어오므로 2^20개의 int형이 있으면모든 숫자를 표현 가능하다 그럼 이제 int로 32개의 숫자를 표현하는 방법에 대해 알아보자이건 2차 배열에서 x,y를 숫자 하나로 표현하는 방식과 비슷하다숫자 n을 표현할 때 n/32는 몇번째 숫자로 표현 하는지 의미하고n%32 는 그 숫자에서 몇번째 비트로 표현 하는지 의미한다만약 5라면 0번째 숫자 5번째 비트이므로a[0]의 5번째 비트다 있는지 확인하려면 a[0] &( 1
어려웠던 문제다대문자 A ~ Z는 문 // 소문자 a~z는 열쇠를 나타낸다문을 열려면 열쇠가 필요하다 이 문제에서는 홈칠 수 있는 문서의 최대 개수를 구해야 한다bfs를 돌리는데 문의 bfs를 따로 만들어 준다그래서 내가 돌아 다니다가 열수 없는 문을 만난다면 문 bfs에 따로 넣어두고 그 문을 열어주는 열쇠를 만나면 문의 좌표를 다 내가 갈 수 있게 큐에 넣어준다! 헷갈리지만 풀면 이해가 간다 소스코드12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970#include #include #include #include #inc..