8일차: 쌓기

6508 단어

부인 성명:



I am a beginner in competitive programming, and this is me documenting my learnings. So, anything I say is just what I think at the moment and should not be taken as hard truths.



문제 1: caps lock



일부 속성을 기반으로 답변하십시오.

#define all(x) begin(x), end(x)

main() {
  string s;
  cin >> s;

  int n = s.length();
  bool first = islower(s[0]);
  bool c = count_if(all(s), [](char c){ return isupper(c); });
  // check condition
  if((c == n) || (first && (c == n-1))) {
    for(auto& e: s) {
      if(isupper(e)) cout << tolower(e);
      else cout << toupper(e);
    }  
  } else {
    cout << s;
  }
}


대소문자를 전환하기 위해 비트 연산자를 사용할 수도 있습니다. 코드를 크게 단순화합니다.

for(auto& c: s) {
  cout << (char) (c^32); // toggle case
}


새로운 cpp 표준 알고리즘 사용:
  • count_if

  • 문제 2: Xenia와 Ringroad



    간단한 수학 문제.

    #define forn(i, n) for(int i = 0; i < n; i++)
    
    main() {
      ll n, m;
      cin >> n >> m;
      ll ans = 0, curr = 1; 
      forn(_, m) {
        ll next;
        cin >> next;
        if(next >= curr) ans += (next-curr);
        else {
          ans += (n-curr)+next;
        }
        curr = next;
      }
      cout << ans;
    }
    


    연산



    우리는 오늘 새로운 알고리즘을 배우지 않았습니다.
    문제를 더 많이 연습해서 어딘가에 갇혔을 때 새로운 알고리즘을 배울 수 있도록 해야 합니다.
    또한 모든 복잡한 알고리즘을 한 번에 배우는 것보다 기본을 아는 것이 도움이 됩니다.
    필요한 경우 새로운 알고리즘을 계속 배우고 연습할 질문을 두 배로 늘립니다.

    출처


  • 토글 케이스: geeksforgeeks
  • 좋은 웹페이지 즐겨찾기