MS's log
  • HOME
  • TAG
  • GUESTBOOK
  • ADMIN
Close

Who am I?

  • github.com/mskim9967

Category

  • 분류 전체보기 (121)
    • 대회, 프로젝트 (21)
      • 2021 국방 공공데이터 경진대회 (1)
      • 2021 군장병 해커톤 (16)
      • 2021 UNI-DTHON (1)
    • Study (58)
      • Backend (29)
      • Infra, DevOps (9)
      • Frontend (14)
      • Data Structure (6)
    • Coding Test (40)
      • Codeforces (1)
      • 백준 (10)
      • codeground (19)
      • 프로그래머스 (9)

Recent Post

Popular Post

Comment

Tags

  • DevOps
  • 군대공부
  • React Native
  • rn

Visitor Counter

어제

오늘

전체

오르락 내리락 / SCPC 2019 1차 예선 1번
By _MS
Coding Test/codeground
2021. 7. 11. 14:29

해결

  • dp
  • dp table을 먼저 채우고 부분합을 저장
  • cache를 채우는 데 $n$, 부분합을 통해 작업 회수를 구하는데 $1$, 시간복잡도는 $O(n)$

소스코드

/*
    Prob
    2019 SCPC 예선 1번 오르락 내리락
    Writer
    MyungSeung Kim(mskim9967@gmail.com)
*/


#include <bits/stdc++.h> 
#include <fstream>

using namespace std;

int n1, n2, tc, ans;
int cache[1000010], ps[1000010];

int dp(int i) {
    int &ret = cache[i];
    if(ret) return ret;

    if(i == 1) return 0;
    if(i % 2 == 1) return ret = 1 + dp(i + 1);
    return ret = 1 + dp(i / 2);
}

int main(void) {
    freopen("input.txt", "r", stdin);
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(0);

    cin >> tc;

    for(int i = 1; i <= 1000000; i++)
        ps[i] = ps[i - 1] + dp(i);    

    for(int tt = 1; tt <= tc; tt++) {
        cin >> n1 >> n2;

        cout << "Case #" << tt << "\n";
        cout << ps[n2] - ps[n1 - 1] << "\n";
    }

    return 0;
}
저작자표시 동일조건 (새창열림)

'Coding Test > codeground' 카테고리의 다른 글

회문인 수의 합 / SCPC 2019 1차 예선 2번  (0) 2021.07.12
버스 타기 / SCPC 2018 1차 예선 1번  (0) 2021.07.12
공 굴리기 / SCPC 2019 1차 예선 2번  (0) 2021.07.11
사다리 게임 / SCPC 2020 1차 예선 3번  (0) 2021.07.10
카드 게임 / SCPC 2020 1차 예선 2번  (0) 2021.07.10
MS's log :: _MS
Contact
Github

Copyright MS's log

Designed by MemoStack

Unicons by Iconscout

티스토리툴바