제출 #1249963

#제출 시각아이디문제언어결과실행 시간메모리
1249963fadak-143개의 봉우리 (IOI25_triples)C++20
컴파일 에러
0 ms0 KiB
//#include "worldmap.h"
#include "triples.h"
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse2")
#define ll long long
#define db double
#define ld long double
#define endl '\n'
#define eb emplace_back 
#define em emplace
#define pb push_back
#define pf push_front
#define pp pop_back
#define fr first
#define sc second
#define sz size
#define ir insert
#define yes cout << "YES" << endl
#define no cout << "NO" << endl
#define all(x) x.begin() , x.end()
#define alice cout << "Alice" << endl
#define bob cout << "Bob" << endl
#define fo(x , y) for(ll i = x;i < y;i++)
using namespace std;
mt19937 rd(time(NULL));
//IOI 2025 problems
const ll mxn = 1e5+5;
const ll md=998244353;
//vector<int> g[mxn];
/* "souvenirs" -> 39 points for now
void buy_souvenirs(int N, ll P0) {
    if(N==2){transaction(P0-1) ;return;}
    if(N==3){
        auto x=transaction(P0-1);
        if(x.fr.sz()==1){ll vl=P0-1-x.sc; transaction(vl-1);transaction(vl-1);}
        else{ll vl= (P0-1-x.sc) ; vl+=(2-vl%2)%2;vl/=2; transaction(vl-1);}
        return;
    }
    vector<ll>cn(N,0) , vl(N);
    vl[0]=P0;
    for(int i =1;i < N;i++) {
        auto x =transaction(vl[i-1] - 1) ;
        for(int y: x.fr) cn[y]++;
        if(x.fr.sz() ==1) vl[i] = vl[i-1] - 1 -x.sc;
        else vl[i] = vl[i-1] - 2;
    }
    for(int i = 1; i<N;i++) {
        while(cn[i] <i) {
            transaction(vl[i]);
            cn[i]++;
        }
    }
}
*/
/* "World Map" -> 72 points for now
vector<vector<int>> regulate(vector<vector<int>> board) {
    int n= board.sz();
    int m=board[0].sz() ;
    int k = max(n,m);
    vector an=vector(k,vector<int> (k));
    for(int i=0;i<n;i++)for(int j = 0;j<m ;j++)an[i][j]=board[i][j];
    for(int i=0;i<k;i++){for(int j=0;j<k;j++){
        if(!an[i][j]){
            if(j>0&&an[i][j-1])an[i][j] =an[i][j-1];
            else if(i>0&&an[i-1][j]) an[i][j] =an[i-1][j];
            else assert(false);
        }
    }}
    return an;
}
bool vs[mxn] ;
vector<pair<int, bool>> st;
void dfs(int v, int pa=-1) {
    vs[v]=true;
    for(int u:g[v]) {
        if(vs[u])continue;
        st.pb({u,true});
        dfs(u,v);
        st.pb({v,false});
    }
}
vector<vector<int>> create_map(int N, int M , vector<int> A , vector<int> B) {
    for(int i = 1 ; i <= N ;i++) g[i].clear(); 
    fill(vs,vs + N+1, false) ;
    for(int i = 0 ;i < M;i++){g[A[i]].pb(B[i]) ;g[B[i]].pb(A[i]);}
    st=vector<pair<int,bool>>{{1,true}}; 
    dfs(1);
    vector ans=vector(N*3 +(N-1), vector<int> (N*2)) ;
    int x= 0;
    for(auto [v,fi]:st) {
        if(fi) {
            for(int j=0;j<3;j++){for(int k = 0; k < N*2;k++)ans[x+j][k]=v;}
            for(int j =0;j <g[v].sz() ;j++)ans[x+1][j*2] = g[v][j];
            x+=3;
        }
        else{
            for(int k =0;k<N*2;k++)ans[x][k]=v;
            x++;
        }
    }
    return regulate(ans) ;
}
*/
//"Triple Peaks" , goal -> 50
vector<int> construct_range(int M , int K) {
    vector<int> rs(M , 0) ;
    for(int i =0;i<M ;i++) {rs[i] = 1 ; if(i%3 ==2) rs[i] = 2;}
    return rs;
}
ll count_triplesnd(vector<int> H) {
    int N = H.sz() ;
    ll ile =0;
    for(int i = N-1;i>=0;i--){
        int k = i - H[i];
        if(k<0)continue;
        int j= k+H[k];
        if(j<0 ||j>= N);
        else if(H[k] + H[j]==H[i] && (i-j)==H[j]&& k<j && j <i)ile++;
        j = i - H[k];
        if(k+H[k] ==j)continue;
        if(j<0||j>=N);
        else if(H[k] + H[j]==H[i] && (j-k)==H[j]&& k<j && j <i)ile++
    }
    return ile;
}
ll count_triples(vector<int> H) {
    int n=H.sz() , b=0;
    bool cz = true;
    for(int i =0 ; i <N;i++) b = max(b,H[i]);
    for(int i = 1 ; i <N;i++) if(H[i-1] >H[i]) cz =false;
    if(cz) return count_triplesnd(H);
    ll ile=0;
    for(int i =0 ;i < N;i++){
        for(int j = i + 1 ; j < min(N, i+b+1); j++){
            int d = j - i;
            if(H[i] == d ||H[j] ==d){
                int r =0;
                if(H[i] == d) r = H[j];
                else r = H[i];
                int k =j+r;
                if(k>=0 && k < N && k > j && H[k] == r + d)ile++;
                k = i +r ;
                if(k >= 0 && k < N && k > j && r == H[k] + d)ile++;
            }
            else{
                int k = j +min(H[i] ,H[j]); 
                if(k>=0 && k<N&&H[k] ==d&&min(H[i], H[j])+d==max(H[i],H[j]))ile++;
            }
        }
    }
    return ile;
}   

컴파일 시 표준 에러 (stderr) 메시지

triples.cpp: In function 'long long int count_triplesnd(std::vector<int>)':
triples.cpp:123:69: error: expected ';' before '}' token
  123 |         else if(H[k] + H[j]==H[i] && (j-k)==H[j]&& k<j && j <i)ile++
      |                                                                     ^
      |                                                                     ;
  124 |     }
      |     ~                                                                
triples.cpp: In function 'long long int count_triples(std::vector<int>)':
triples.cpp:130:23: error: 'N' was not declared in this scope
  130 |     for(int i =0 ; i <N;i++) b = max(b,H[i]);
      |                       ^
triples.cpp:131:24: error: 'N' was not declared in this scope
  131 |     for(int i = 1 ; i <N;i++) if(H[i-1] >H[i]) cz =false;
      |                        ^
triples.cpp:134:23: error: 'N' was not declared in this scope
  134 |     for(int i =0 ;i < N;i++){
      |                       ^