[C++] AtCoder Beginner Contest 198

AtCoder Beginner Contest 198

풀이

A

A - Div

정수 N을 입력받았을 때

두 소년이 N개의 사탕을 분배할 수 있는 방법은 총 몇가지인지 묻는 문제

ex) 2명이 3개의 사탕을 분배하는 경우 -> (1,2) (2,1) 총 2가지 2명이 4개의 사탕을 분배하는 경우 -> (1,3) (2,2) (3,1) 총 3가지 …

N-1을 출력하면 정답

#pragma warning(disable : 4996)
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<ll> vll;
typedef pair<ll, ll> pll;
typedef pair<ld, ld> pld;
typedef tuple<ll, ll, ll> tl3;
#define FOR(a, b, c) for (int(a) = (b); (a) < (c); ++(a))
#define FORN(a, b, c) for (int(a) = (b); (a) <= (c); ++(a))
#define rep(i, n) FOR(i, 0, n)
#define repn(i, n) FORN(i, 1, n)
#define tc(t) while (t--)
// https://atcoder.jp/contests/abc198/tasks/abc198_a
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll n;
    cin >> n;
    cout << n-1;

    return 0;
}
B

B - Palindrome with leading zeros

Leading Zero를 붙이거나 안붙였을때 펠린드롬이 되는지 여부를 확인하면 되는 문제

Leading Zero를 포함하는 펠린드롬이라면 원래 뒤에 0이 붙어있을 것이기 때문에 10으로 나눠질때 까지 나눠준 후 펠린드롬 여부를 확인하면 된다.

#pragma warning(disable : 4996)
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<ll> vll;
typedef pair<ll, ll> pll;
typedef pair<ld, ld> pld;
typedef tuple<ll, ll, ll> tl3;
#define FOR(a, b, c) for (int(a) = (b); (a) < (c); ++(a))
#define FORN(a, b, c) for (int(a) = (b); (a) <= (c); ++(a))
#define rep(i, n) FOR(i, 0, n)
#define repn(i, n) FORN(i, 1, n)
#define tc(t) while (t--)
// https://atcoder.jp/contests/abc198/tasks/abc198_b
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll n;
    cin >> n;
    if(n == 0) {
        cout<<"Yes";
        return 0;
    }
    else {
        while(n%10 == 0)
            n/=10;
    }
    string s = to_string(n);
    string ss = s;
    reverse(all(s));
  
    if(ss == s) cout<<"Yes";
    else cout<<"No";

    return 0;
}
C

C - Compass Walking

R, X, Y를 입력받을 때 평면에서 한번에 R만큼의 거리를 갈 수 있다고 하자

(0,0)부터 시작해서 (X,Y)까지 도착하려면 총 몇번을 가야하는지 묻는 문제

도착 지점과 원점과의 거리가 R과 같다면 1 R 초과 2R 이하라면 2 이외의 경우에는 ceil(d/R)을 출력하면 정답

문제 이름대로 좌표평면에 원을 그려보면 쉽게 이해 가능

ss

#pragma warning(disable : 4996)
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<ll> vll;
typedef pair<ll, ll> pll;
typedef pair<ld, ld> pld;
typedef tuple<ll, ll, ll> tl3;
#define FOR(a, b, c) for (int(a) = (b); (a) < (c); ++(a))
#define FORN(a, b, c) for (int(a) = (b); (a) <= (c); ++(a))
#define rep(i, n) FOR(i, 0, n)
#define repn(i, n) FORN(i, 1, n)
#define tc(t) while (t--)
// https://atcoder.jp/contests/abc198/tasks/abc198_c
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll r,x,y;
    cin >> r >> x >> y;
    ll len = x*x + y*y;
    ll ans = 0;
    if(len == r*r) cout << 1;
    else if(len < r*r) cout << 2;
    else{
        while(r*r*ans*ans<len){
            ans++;
        }
        cout << ans;
    }

    return 0;
}