답안 #987885

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
987885 2024-05-23T18:24:29 Z activedeltorre Shopping Plans (CCO20_day2problem3) C++14
20 / 25
216 ms 46796 KB
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;
//ifstream cin("a.in");
//ofstream cout("a.out");
long long inf=1e9+10;
struct node
{
    long long  layer,sum,bitipref,lst,rghtbord,biti;
    //  node(int a,int b,int c,int d,int e) : layer(a),sum(b),bitipref(c),lst(d),rghtbord(e){}
};
struct  cmp
{
    bool operator()(node a,node  b)
    {
        return a.sum>b.sum;
    }
};
priority_queue<node,vector<node>,cmp>pq;
vector<long long >arr;
vector<long long >adj[200005];
long long cost[200005];
vector<long long>ord;
bool cmp2(long long a,long long b)
{
    return cost[a]<cost[b];
}
int y[200005];
int x[200005];
long long init[200005];
node special(node curr)
{
    int g,g2;
    g=ord[curr.layer];
    g2=ord[curr.layer+1];
    curr.lst=0;
    curr.sum+=adj[g2][0];
    curr.layer++;
    curr.biti=1;
    curr.bitipref=0;
    curr.rghtbord=adj[g2].size()-1;
    return curr;
}
node skip(node curr)
{
    int g,g2;
    g=ord[curr.layer];
    g2=ord[curr.layer+1];
    if(x[g]==0)
    {
       curr.sum=curr.sum-adj[g][curr.lst];
    }
    else
    curr.sum=curr.sum-adj[g][curr.lst]+adj[g][curr.lst-1];
    if(x[g2]==0)
    {
        return special(curr);
    }
    curr.layer++;
    curr.biti=x[g2];
    curr.lst=x[g2];
    curr.bitipref=x[g2]-1;
    curr.rghtbord=adj[g2].size()-1;
    curr.sum=curr.sum+adj[g2][curr.lst]-adj[g2][curr.lst-1];
    return curr;
}
node godown(node curr)
{
    int g,g2;
    g=ord[curr.layer];
    g2=ord[curr.layer+1];
    if(x[g2]==0)
    {
        return special(curr);
    }
    curr.layer++;
    curr.biti=x[g2];
    curr.lst=x[g2];
    curr.bitipref=x[g2]-1;
    curr.rghtbord=adj[g2].size()-1;
    curr.sum=curr.sum+adj[g2][curr.lst]-adj[g2][curr.lst-1];
    return curr;
}
node shift(node curr)
{
    int g;
    g=ord[curr.layer];
    curr.lst++;
    curr.sum=curr.sum+adj[g][curr.lst]-adj[g][curr.lst-1];
    return curr;
}
node fixborderandshift(node curr)
{
    int g;
    g=ord[curr.layer];
    curr.rghtbord=curr.lst-1;
    curr.lst=curr.bitipref;
    curr.bitipref--;
    curr.sum=curr.sum+adj[g][curr.lst]-adj[g][curr.lst-1];
    return curr;
}
node fixborderandcreate(node curr)
{
    int g;
    g=ord[curr.layer];
    curr.rghtbord=curr.lst-1;
    curr.lst=0;
    curr.biti++;
    curr.sum=curr.sum+init[g];
    return curr;
}
signed  main()
{
    long long  n,m,k,i,a,b;
    long long sum=0;
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin>>n>>m>>k;
    for(i=1; i<=n; i++)
    {
        cin>>a>>b;
        adj[a].push_back(b);
    }
    long long imp=0,minim=inf,poz=m;
    for(i=1; i<=m; i++)
    {
        cin>>x[i]>>y[i];
        if(y[i]==0)
        {
            cost[i]=inf;
        }
        else
        {
            sort(adj[i].begin(),adj[i].end());
            if(adj[i].size()<x[i])
            {
                for(long long j=1; j<=k; j++)
                {
                    cout<<-1<<'\n';
                }
                return 0;
            }
            if(x[i]==0)
            {
                if(adj[i].size()==0)
                {
                    cost[i]=inf;
                }
                else
                {
                    init[i]=adj[i][0];
                    cost[i]=adj[i][0];
                }
            }
            else
            {
                int vkuk=adj[i][0];
                init[i]=adj[i][0];
                for(int j=0; j<adj[i].size(); j++)
                {
                    if(j+1<=x[i])
                    {
                        sum+=adj[i][j];
                    }
                    adj[i][j]-=vkuk;
                }
                if(adj[i].size()==x[i])
                {
                    cost[i]=inf;
                }
                else
                {
                    cost[i]=adj[i][x[i]];
                }
            }
        }
        ord.push_back(i);
    }
    sort(ord.begin(),ord.end(),cmp2);
    m--;
    for(i=0; i<ord.size(); i++)
    {
        if(cost[ord[i]]==inf)
        {
            m=i-1;
            break;
        }
    }
    node curr,curr2;
    cout<<sum<<'\n';
    k--;
    if(m>=0)
    {
        int g=ord[0];
        if(x[g]==0)
        {
            curr.layer=0;
            curr.sum=adj[g][0];
            curr.bitipref=0;
            curr.lst=0;
            curr.biti=1;
            curr.rghtbord=adj[g].size()-1;
            pq.push(curr);
        }
        else
        {
            curr.layer=0;
            curr.sum=adj[g][x[g]]-adj[g][x[g]-1];
            curr.bitipref=x[g]-1;
            curr.lst=x[g];
            curr.rghtbord=adj[g].size()-1;
            curr.biti=x[g];
            pq.push(curr);
        }
        while(pq.size() && k && imp==0)
        {
            curr=pq.top();
            pq.pop();
            k--;
            cout<<curr.sum+sum<<'\n';
            g=ord[curr.layer];
            if(x[g]==0 && curr.biti==1 && curr.layer+1<=m && curr.lst==0)
            {
                curr2=skip(curr);
                pq.push(curr2);
            }
            if(curr.lst==x[g] && curr.bitipref==x[g]-1 && curr.biti==x[g] && curr.layer+1<=m)
            {
                curr2=skip(curr);
                pq.push(curr2);
            }
            if(curr.lst+1<=curr.rghtbord)
            {
                curr2=shift(curr);
                pq.push(curr2);
            }
            if(curr.bitipref>=1 && curr.lst>=curr.bitipref+1)
            {
                curr2=fixborderandshift(curr);
                pq.push(curr2);
            }
            if(curr.bitipref==0 && curr.lst>=1 && curr.biti+1<=y[g])
            {
                curr2=fixborderandcreate(curr);
                pq.push(curr2);
            }
            if(curr.layer+1<=m)
            {
                curr2=godown(curr);
                pq.push(curr2);
            }
        }
    }
    while(k)
    {
        k--;
        cout<<-1<<'\n';
    }
    return 0;
}
/*
5 2 33
1 5
1 3
2 3
1 6
2 1
0 3
0 2*/

Compilation message

Main.cpp: In function 'node special(node)':
Main.cpp:36:9: warning: variable 'g' set but not used [-Wunused-but-set-variable]
   36 |     int g,g2;
      |         ^
Main.cpp: In function 'node godown(node)':
Main.cpp:72:9: warning: variable 'g' set but not used [-Wunused-but-set-variable]
   72 |     int g,g2;
      |         ^
Main.cpp: In function 'int main()':
Main.cpp:138:29: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  138 |             if(adj[i].size()<x[i])
      |                ~~~~~~~~~~~~~^~~~~
Main.cpp:162:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  162 |                 for(int j=0; j<adj[i].size(); j++)
      |                              ~^~~~~~~~~~~~~~
Main.cpp:170:33: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  170 |                 if(adj[i].size()==x[i])
      |                    ~~~~~~~~~~~~~^~~~~~
Main.cpp:184:15: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  184 |     for(i=0; i<ord.size(); i++)
      |              ~^~~~~~~~~~~
Main.cpp:127:21: warning: unused variable 'minim' [-Wunused-variable]
  127 |     long long imp=0,minim=inf,poz=m;
      |                     ^~~~~
Main.cpp:127:31: warning: unused variable 'poz' [-Wunused-variable]
  127 |     long long imp=0,minim=inf,poz=m;
      |                               ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 10460 KB Output is correct
2 Correct 6 ms 10532 KB Output is correct
3 Correct 6 ms 10256 KB Output is correct
4 Correct 5 ms 10268 KB Output is correct
5 Correct 5 ms 10292 KB Output is correct
6 Correct 5 ms 10280 KB Output is correct
7 Correct 5 ms 10268 KB Output is correct
8 Correct 5 ms 10276 KB Output is correct
9 Correct 4 ms 9564 KB Output is correct
10 Correct 5 ms 10340 KB Output is correct
11 Correct 3 ms 9564 KB Output is correct
12 Correct 4 ms 9816 KB Output is correct
13 Correct 4 ms 10072 KB Output is correct
14 Correct 5 ms 10280 KB Output is correct
15 Correct 4 ms 9908 KB Output is correct
16 Correct 4 ms 10076 KB Output is correct
17 Correct 7 ms 10524 KB Output is correct
18 Correct 3 ms 9820 KB Output is correct
19 Correct 4 ms 10204 KB Output is correct
20 Correct 5 ms 10292 KB Output is correct
21 Correct 3 ms 9560 KB Output is correct
22 Correct 5 ms 10072 KB Output is correct
23 Correct 5 ms 10280 KB Output is correct
24 Correct 4 ms 9820 KB Output is correct
25 Correct 4 ms 9820 KB Output is correct
26 Correct 4 ms 10280 KB Output is correct
27 Correct 5 ms 10268 KB Output is correct
28 Correct 4 ms 10280 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 81 ms 36296 KB Output is correct
2 Correct 74 ms 37564 KB Output is correct
3 Correct 72 ms 36760 KB Output is correct
4 Correct 87 ms 37636 KB Output is correct
5 Correct 60 ms 23252 KB Output is correct
6 Correct 66 ms 23496 KB Output is correct
7 Correct 71 ms 36360 KB Output is correct
8 Correct 73 ms 35632 KB Output is correct
9 Correct 13 ms 10328 KB Output is correct
10 Correct 71 ms 37304 KB Output is correct
11 Correct 13 ms 10328 KB Output is correct
12 Correct 28 ms 11480 KB Output is correct
13 Correct 73 ms 36020 KB Output is correct
14 Correct 75 ms 36720 KB Output is correct
15 Correct 14 ms 10584 KB Output is correct
16 Correct 73 ms 36020 KB Output is correct
17 Correct 73 ms 37556 KB Output is correct
18 Correct 22 ms 10964 KB Output is correct
19 Correct 76 ms 36704 KB Output is correct
20 Correct 75 ms 36972 KB Output is correct
21 Correct 16 ms 10360 KB Output is correct
22 Correct 65 ms 23872 KB Output is correct
23 Correct 85 ms 36688 KB Output is correct
24 Correct 14 ms 10332 KB Output is correct
25 Correct 15 ms 10328 KB Output is correct
26 Correct 62 ms 24072 KB Output is correct
27 Correct 72 ms 24516 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 10460 KB Output is correct
2 Correct 6 ms 10532 KB Output is correct
3 Correct 6 ms 10256 KB Output is correct
4 Correct 5 ms 10268 KB Output is correct
5 Correct 5 ms 10292 KB Output is correct
6 Correct 5 ms 10280 KB Output is correct
7 Correct 5 ms 10268 KB Output is correct
8 Correct 5 ms 10276 KB Output is correct
9 Correct 4 ms 9564 KB Output is correct
10 Correct 5 ms 10340 KB Output is correct
11 Correct 3 ms 9564 KB Output is correct
12 Correct 4 ms 9816 KB Output is correct
13 Correct 4 ms 10072 KB Output is correct
14 Correct 5 ms 10280 KB Output is correct
15 Correct 4 ms 9908 KB Output is correct
16 Correct 4 ms 10076 KB Output is correct
17 Correct 7 ms 10524 KB Output is correct
18 Correct 3 ms 9820 KB Output is correct
19 Correct 4 ms 10204 KB Output is correct
20 Correct 5 ms 10292 KB Output is correct
21 Correct 3 ms 9560 KB Output is correct
22 Correct 5 ms 10072 KB Output is correct
23 Correct 5 ms 10280 KB Output is correct
24 Correct 4 ms 9820 KB Output is correct
25 Correct 4 ms 9820 KB Output is correct
26 Correct 4 ms 10280 KB Output is correct
27 Correct 5 ms 10268 KB Output is correct
28 Correct 4 ms 10280 KB Output is correct
29 Correct 81 ms 36296 KB Output is correct
30 Correct 74 ms 37564 KB Output is correct
31 Correct 72 ms 36760 KB Output is correct
32 Correct 87 ms 37636 KB Output is correct
33 Correct 60 ms 23252 KB Output is correct
34 Correct 66 ms 23496 KB Output is correct
35 Correct 71 ms 36360 KB Output is correct
36 Correct 73 ms 35632 KB Output is correct
37 Correct 13 ms 10328 KB Output is correct
38 Correct 71 ms 37304 KB Output is correct
39 Correct 13 ms 10328 KB Output is correct
40 Correct 28 ms 11480 KB Output is correct
41 Correct 73 ms 36020 KB Output is correct
42 Correct 75 ms 36720 KB Output is correct
43 Correct 14 ms 10584 KB Output is correct
44 Correct 73 ms 36020 KB Output is correct
45 Correct 73 ms 37556 KB Output is correct
46 Correct 22 ms 10964 KB Output is correct
47 Correct 76 ms 36704 KB Output is correct
48 Correct 75 ms 36972 KB Output is correct
49 Correct 16 ms 10360 KB Output is correct
50 Correct 65 ms 23872 KB Output is correct
51 Correct 85 ms 36688 KB Output is correct
52 Correct 14 ms 10332 KB Output is correct
53 Correct 15 ms 10328 KB Output is correct
54 Correct 62 ms 24072 KB Output is correct
55 Correct 72 ms 24516 KB Output is correct
56 Correct 167 ms 44396 KB Output is correct
57 Correct 178 ms 42252 KB Output is correct
58 Correct 190 ms 42864 KB Output is correct
59 Correct 158 ms 41032 KB Output is correct
60 Correct 169 ms 31932 KB Output is correct
61 Correct 146 ms 43904 KB Output is correct
62 Correct 154 ms 39484 KB Output is correct
63 Correct 119 ms 37368 KB Output is correct
64 Correct 58 ms 13256 KB Output is correct
65 Correct 160 ms 42356 KB Output is correct
66 Correct 49 ms 13468 KB Output is correct
67 Correct 69 ms 14620 KB Output is correct
68 Correct 93 ms 37544 KB Output is correct
69 Correct 158 ms 42716 KB Output is correct
70 Correct 15 ms 10524 KB Output is correct
71 Correct 89 ms 36272 KB Output is correct
72 Correct 155 ms 42036 KB Output is correct
73 Correct 16 ms 10196 KB Output is correct
74 Correct 87 ms 24488 KB Output is correct
75 Correct 196 ms 44208 KB Output is correct
76 Correct 13 ms 10328 KB Output is correct
77 Correct 82 ms 23992 KB Output is correct
78 Correct 137 ms 37396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 58 ms 14144 KB Output is correct
2 Correct 54 ms 11476 KB Output is correct
3 Correct 13 ms 10340 KB Output is correct
4 Correct 13 ms 10528 KB Output is correct
5 Correct 188 ms 46796 KB Output is correct
6 Correct 196 ms 46000 KB Output is correct
7 Correct 216 ms 45992 KB Output is correct
8 Correct 206 ms 44040 KB Output is correct
9 Correct 164 ms 45360 KB Output is correct
10 Correct 191 ms 45352 KB Output is correct
11 Correct 202 ms 44056 KB Output is correct
12 Correct 142 ms 42940 KB Output is correct
13 Correct 110 ms 19016 KB Output is correct
14 Correct 168 ms 44212 KB Output is correct
15 Correct 187 ms 45660 KB Output is correct
16 Correct 73 ms 24252 KB Output is correct
17 Correct 95 ms 35916 KB Output is correct
18 Correct 178 ms 44456 KB Output is correct
19 Correct 80 ms 37288 KB Output is correct
20 Correct 106 ms 36040 KB Output is correct
21 Correct 163 ms 45788 KB Output is correct
22 Correct 80 ms 23740 KB Output is correct
23 Correct 110 ms 37304 KB Output is correct
24 Correct 191 ms 46256 KB Output is correct
25 Correct 74 ms 37340 KB Output is correct
26 Correct 72 ms 36784 KB Output is correct
27 Correct 148 ms 43320 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 10460 KB Output is correct
2 Correct 6 ms 10532 KB Output is correct
3 Correct 6 ms 10256 KB Output is correct
4 Correct 5 ms 10268 KB Output is correct
5 Correct 5 ms 10292 KB Output is correct
6 Correct 5 ms 10280 KB Output is correct
7 Correct 5 ms 10268 KB Output is correct
8 Correct 5 ms 10276 KB Output is correct
9 Correct 4 ms 9564 KB Output is correct
10 Correct 5 ms 10340 KB Output is correct
11 Correct 3 ms 9564 KB Output is correct
12 Correct 4 ms 9816 KB Output is correct
13 Correct 4 ms 10072 KB Output is correct
14 Correct 5 ms 10280 KB Output is correct
15 Correct 4 ms 9908 KB Output is correct
16 Correct 4 ms 10076 KB Output is correct
17 Correct 7 ms 10524 KB Output is correct
18 Correct 3 ms 9820 KB Output is correct
19 Correct 4 ms 10204 KB Output is correct
20 Correct 5 ms 10292 KB Output is correct
21 Correct 3 ms 9560 KB Output is correct
22 Correct 5 ms 10072 KB Output is correct
23 Correct 5 ms 10280 KB Output is correct
24 Correct 4 ms 9820 KB Output is correct
25 Correct 4 ms 9820 KB Output is correct
26 Correct 4 ms 10280 KB Output is correct
27 Correct 5 ms 10268 KB Output is correct
28 Correct 4 ms 10280 KB Output is correct
29 Correct 81 ms 36296 KB Output is correct
30 Correct 74 ms 37564 KB Output is correct
31 Correct 72 ms 36760 KB Output is correct
32 Correct 87 ms 37636 KB Output is correct
33 Correct 60 ms 23252 KB Output is correct
34 Correct 66 ms 23496 KB Output is correct
35 Correct 71 ms 36360 KB Output is correct
36 Correct 73 ms 35632 KB Output is correct
37 Correct 13 ms 10328 KB Output is correct
38 Correct 71 ms 37304 KB Output is correct
39 Correct 13 ms 10328 KB Output is correct
40 Correct 28 ms 11480 KB Output is correct
41 Correct 73 ms 36020 KB Output is correct
42 Correct 75 ms 36720 KB Output is correct
43 Correct 14 ms 10584 KB Output is correct
44 Correct 73 ms 36020 KB Output is correct
45 Correct 73 ms 37556 KB Output is correct
46 Correct 22 ms 10964 KB Output is correct
47 Correct 76 ms 36704 KB Output is correct
48 Correct 75 ms 36972 KB Output is correct
49 Correct 16 ms 10360 KB Output is correct
50 Correct 65 ms 23872 KB Output is correct
51 Correct 85 ms 36688 KB Output is correct
52 Correct 14 ms 10332 KB Output is correct
53 Correct 15 ms 10328 KB Output is correct
54 Correct 62 ms 24072 KB Output is correct
55 Correct 72 ms 24516 KB Output is correct
56 Correct 167 ms 44396 KB Output is correct
57 Correct 178 ms 42252 KB Output is correct
58 Correct 190 ms 42864 KB Output is correct
59 Correct 158 ms 41032 KB Output is correct
60 Correct 169 ms 31932 KB Output is correct
61 Correct 146 ms 43904 KB Output is correct
62 Correct 154 ms 39484 KB Output is correct
63 Correct 119 ms 37368 KB Output is correct
64 Correct 58 ms 13256 KB Output is correct
65 Correct 160 ms 42356 KB Output is correct
66 Correct 49 ms 13468 KB Output is correct
67 Correct 69 ms 14620 KB Output is correct
68 Correct 93 ms 37544 KB Output is correct
69 Correct 158 ms 42716 KB Output is correct
70 Correct 15 ms 10524 KB Output is correct
71 Correct 89 ms 36272 KB Output is correct
72 Correct 155 ms 42036 KB Output is correct
73 Correct 16 ms 10196 KB Output is correct
74 Correct 87 ms 24488 KB Output is correct
75 Correct 196 ms 44208 KB Output is correct
76 Correct 13 ms 10328 KB Output is correct
77 Correct 82 ms 23992 KB Output is correct
78 Correct 137 ms 37396 KB Output is correct
79 Correct 58 ms 14144 KB Output is correct
80 Correct 54 ms 11476 KB Output is correct
81 Correct 13 ms 10340 KB Output is correct
82 Correct 13 ms 10528 KB Output is correct
83 Correct 188 ms 46796 KB Output is correct
84 Correct 196 ms 46000 KB Output is correct
85 Correct 216 ms 45992 KB Output is correct
86 Correct 206 ms 44040 KB Output is correct
87 Correct 164 ms 45360 KB Output is correct
88 Correct 191 ms 45352 KB Output is correct
89 Correct 202 ms 44056 KB Output is correct
90 Correct 142 ms 42940 KB Output is correct
91 Correct 110 ms 19016 KB Output is correct
92 Correct 168 ms 44212 KB Output is correct
93 Correct 187 ms 45660 KB Output is correct
94 Correct 73 ms 24252 KB Output is correct
95 Correct 95 ms 35916 KB Output is correct
96 Correct 178 ms 44456 KB Output is correct
97 Correct 80 ms 37288 KB Output is correct
98 Correct 106 ms 36040 KB Output is correct
99 Correct 163 ms 45788 KB Output is correct
100 Correct 80 ms 23740 KB Output is correct
101 Correct 110 ms 37304 KB Output is correct
102 Correct 191 ms 46256 KB Output is correct
103 Correct 74 ms 37340 KB Output is correct
104 Correct 72 ms 36784 KB Output is correct
105 Correct 148 ms 43320 KB Output is correct
106 Correct 41 ms 11128 KB Output is correct
107 Incorrect 51 ms 17348 KB Output isn't correct
108 Halted 0 ms 0 KB -