본문 바로가기

대회/KOI

와 이걸 왜 대회 때 못풀었지

KOI'24 이진 트리 (중등부 3번, 고등부 2번)

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma optimize("unroll-loops")
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define all(x) x.begin(), x.end()
#define rll(x) x.rbegin(), x.rend()
#define comp(x) x.erase(unique(all(x)), x.end())
#define MOD 1000000007
#define debug(x) cout << #x<<" is "<<x<<"\n";
#define X first
#define Y second
#define DEB cout<<"[DEBUG]"
#define PAIR(a,b) "("<<a<<", "<<b<<")"
#define PRINT1(V) DEB<<#V<<endl; for(auto i : V)DEB<<i<<"\n"
#define PRINT2(V) DEB<<#V<<endl; for(auto [a,b] : V)DEB<<PAIR(a,b)<<"\n";
typedef __int128_t lll;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> P;
typedef pair<ll,P> PP;
ll n;
ll dp[101010] = {1}, dpR[101010]={1}, dpL[101010]={1}, CR[101010]={1}, CL[101010]={1};
ll A[101010], B[101010];
int main(){
    fast;
    cin>>n;
    for(int i = 1 ; i <= n ; i++){
        cin>>A[i]>>B[i];
        dpR[i] = (dpR[A[i]] + 1 * CR[A[i]] + dpR[B[i]] - 1) % MOD;
        dpL[i] = (dpL[B[i]] + 1 * CL[B[i]] + dpL[A[i]] - 1) % MOD;
        CR[i] = (CR[A[i]]+CR[B[i]])%MOD;
        CL[i] = (CL[A[i]]+CL[B[i]])%MOD;
        dp[i] = (dp[A[i]] + dp[B[i]] + (dpR[A[i]] * CL[B[i]])%MOD + (dpL[B[i]] * CR[A[i]])%MOD - 1) % MOD;
        cout<<dp[i]<<"\n";
    }
}

 

코드도 겁나 짧네요..

'대회 > KOI' 카테고리의 다른 글

KOI 2024 일기  (1) 2024.05.12
KOI 지역본선 2005  (0) 2023.10.09
KOI 지역본선 2004  (0) 2023.10.09
KOI 2023 2차 대회 중등부 후기  (2) 2023.07.17