Submission #1251081

#TimeUsernameProblemLanguageResultExecution timeMemory
1251081abcdxyz123Souvenirs (IOI25_souvenirs)C++17
Compilation error
0 ms0 KiB
#include "souvenirs.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define vi vector<ll>
#define fi first
#define se second
vector<ll>p;
vector<int>cnt;
int Refresh(ll &sum,vector<int>&cur)
{
    int old=cur.size();
    set<int>s;
    for(int v:cur)
    {
        s.insert(v);
    }
    for(int v:cur)
    {
        if(p[v]!=-1)
        {
            sum-=p[v];
            s.erase(v);
        }
    }
    cur.clear();
    for(int v:s)cur.push_back(v);
    return (old>cur.size());
}
void dfs(int u,ll sum,vector<int>cur)
{
    /*
    cout<<"+>"<<u<<'\n';
    cout<<sum<<'\n';
    for(int x:cur)cout<<x<<' ';
    cout<<'\n';
    */
    if(cur.size()==1)
    {
        p[u]=sum;
        return ;
    }
    Refresh(sum,cur);
    while(true)
    {
        ll nxt_sum=sum/cur.size();
        while(true)
        {
            pair<vi,ll>nxt=transaction(nxt_sum);
            for(int v:nxt.fi)cnt[v]++;
            dfs(nxt.fi[0],nxt_sum-nxt.se,nxt.fi);
            if(Refresh(sum,cur))break;
            nxt_sum=p[nxt.fi[0]]-1;
        }
        if(cur.size()==1)
        {
            p[u]=sum;
            break;
        }
    }
}
void buy_souvenirs(int n,ll p0)
{
    p=vector<ll>(n,-1);
    p[0]=p0;
    cnt=vector<int>(n,0);
    for(int i=1;i<n;i++)
    {
        if(p[i]==-1)
        {
            ll nxt_sum=p[i-1]-1;
            pair<vi,ll>nxt=transaction(nxt_sum);
            for(int v:nxt.fi)cnt[v]++;
            nxt_sum-=nxt.se;
            Refresh(nxt_sum,nxt.fi);
            dfs(nxt.fi[0],nxt_sum,nxt.fi);
        }
    }
    for(int i=1;i<n;i++)
    {
        while(cnt[i]<i)
        {
            transaction(p[i]);
            cnt[i]++;
        }
    }
}

Compilation message (stderr)

souvenirs.cpp: In function 'void dfs(int, long long int, std::vector<int>)':
souvenirs.cpp:49:39: error: conversion from 'pair<vector<int>,[...]>' to non-scalar type 'pair<vector<long long int>,[...]>' requested
   49 |             pair<vi,ll>nxt=transaction(nxt_sum);
      |                            ~~~~~~~~~~~^~~~~~~~~
souvenirs.cpp:6:12: error: could not convert 'nxt.std::pair<std::vector<long long int>, long long int>::first' from 'vector<long long int>' to 'vector<int>'
    6 | #define fi first
      |            ^
      |            |
      |            vector<long long int>
souvenirs.cpp:51:46: note: in expansion of macro 'fi'
   51 |             dfs(nxt.fi[0],nxt_sum-nxt.se,nxt.fi);
      |                                              ^~
souvenirs.cpp: In function 'void buy_souvenirs(int, long long int)':
souvenirs.cpp:72:39: error: conversion from 'pair<vector<int>,[...]>' to non-scalar type 'pair<vector<long long int>,[...]>' requested
   72 |             pair<vi,ll>nxt=transaction(nxt_sum);
      |                            ~~~~~~~~~~~^~~~~~~~~
souvenirs.cpp:6:12: error: invalid initialization of reference of type 'std::vector<int>&' from expression of type 'std::vector<long long int>'
    6 | #define fi first
      |            ^
souvenirs.cpp:75:33: note: in expansion of macro 'fi'
   75 |             Refresh(nxt_sum,nxt.fi);
      |                                 ^~
souvenirs.cpp:10:33: note: in passing argument 2 of 'int Refresh(long long int&, std::vector<int>&)'
   10 | int Refresh(ll &sum,vector<int>&cur)
      |                     ~~~~~~~~~~~~^~~
souvenirs.cpp:6:12: error: could not convert 'nxt.std::pair<std::vector<long long int>, long long int>::first' from 'vector<long long int>' to 'vector<int>'
    6 | #define fi first
      |            ^
      |            |
      |            vector<long long int>
souvenirs.cpp:76:39: note: in expansion of macro 'fi'
   76 |             dfs(nxt.fi[0],nxt_sum,nxt.fi);
      |                                       ^~