본문 바로가기

분류 전체보기

(695)
6781 static int to_index[255]; static void to_index_init(void) { to_index['R'] = 0; to_index['G'] = 1; to_index['B'] = 2; } static const char * solution(void) { vector table[3]; char buf[2][16]; int grp = 0; scanf("%s\n", buf[0]); scanf("%s\n", buf[1]); for (int i = 0; i < 9; i++) table[to_index[buf[1][i]]].push_back(buf[0][i] - '0'); for (int i = 0; i < 3; i++) { if (table[i].empty()) continue; if (..
7088 static int N, Q, L, R; static int cowlist[3 + 1][100000 + 1]; static void solution(void) { int tmp; scanf("%d %d", &N, &Q); for (int i = 1; i
7194 static int s, t, a, b; static int solution(void) { scanf("%d %d %d %d", &s, &t, &a, &b); int ret = 0; if (b == 1) { if ((t - s) % a == 0) return (t - s) / a; else return -1; } while (s = s) t /= b; else t -= a; ret += 1; } if (s == t) return ret; else return -1; } s를 +a 하거나 *b 해서 t를 최대한 빨리 얻을 수 있는지, 얻을 수 있다면 최소 몇번의 연산을 해야하는지 찾는 문제이다. b가 1이면 곱해도 그 영향이 없으므로 연산에서 제외하여 ..
6808 static int table[2][19]; static int a[9], b[9]; static int ans[2]; static void __solution(int len, int as, int bs) { //재귀에서는 가급전 인자로 받은 변수에 대해서 += 과 같은 연산을 하지 말 것. if (len == 9) { if (as > bs) ans[0] += 1; else if (as b[i]) __solution(len + 1, as + score, ..
4012 static int table[16][16]; static int N; static int __solution(int s, int sel_bit, int cnt) { if (cnt == N / 2) { vector grp[2]; for (int i = 0; i < N; i++) { if (sel_bit & 1 val[1] ? val[0] - val[1] : val[1] - val[0]); } int min = 0x7FFFFFFF; for (int start = s + 1; start < N; start++) { int ret = __solution(start, sel_bit | 1
4013 static list table[5]; static int visit[5]; static int score[] = { 0, 1, 2, 4, 8 }; static int K, N, R; //K, 톱날위치, 회전방향 static void rotation(int n, int r) { list &cur = table[n]; if (r > 0) //시계 방향으로 회전 { cur.push_front(cur.back()); cur.pop_back(); } else //반시계 방향으로 회전 { cur.push_back(cur.front()); cur.pop_front(); } } static void __solution(int n, int r) { if (n 5) return; list::iterator ml, mr;..
7466 static int N, K; static int solution(void) { int gcd = 1; scanf("%d %d", &N, &K); for (int div = 2; div
8191 static int table[200000 + 1]; static int N; static int solution(void) { int ret = 0, val; scanf("%d", &N); for (int i = 1; i 20만번 리스트를 순회하고 1이 제거됨 2> 19만번 리스트를 순회하고 2가 제거됨. ... 200000> 1번 리스트를 순회하고 200000이 제거됨. 이 경우 대략 100000*199999 번 리스트를 순회하게 된다. 대략 39,999,800,000‬ 번이다. 그래서 배열 전체를 보는 방법을 생각해보다가 아래와 같은 방법을 발견하였다. 4 3 5 1 2 6 이 있을 때 연속해서 증가하는 그룹을 찾는 것이다. (4 (3) 5 (1, 2), 6) 3이 하나의 그룹/ 4, 5, 6 이 ..
8189 static int N, A, B, msgs[1001]; static queue q[2]; static void solution(void) { int last, cnt = 0, rmv; scanf("%d %d %d", &N, &A, &B); for (int i = 1; i
6853 static pair p[3], t; static int N, ans[3]; static void check() { if (t.first p[1].first || t.second p[1].second) ans[2] += 1; else if (t.first > p[0].first && t.first p[0].second && t.second < p[1].second) ans[0] += 1; else ans[1] += 1; } static void move_to_zero() { if (p[0].second < p[1].second) { if (p[0].first <..