답안 #987980

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
987980 2024-05-23T20:03:14 Z activedeltorre Shopping Plans (CCO20_day2problem3) C++14
25 / 25
206 ms 49844 KB
///OWNERUL LUI CALIN <3
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")

using namespace std;
long long inf=1e9+10;
struct node
{
    long long  sum;
    int layer,bitipref,lst,rghtbord,biti;
};
struct  cmp
{
    bool operator()(node a,node  b)
    {
        return a.sum>b.sum;
    }
};
priority_queue<node,vector<node>,cmp>pq;
vector<int>adj[200005];
int cost[200005];
vector<int>ord;
bool cmp2(int a,int b)
{
    return cost[a]<cost[b];
}
int y[200005];
int x[200005];
int init[200005];
int g,g2;
node special(node curr)
{
    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)
{
    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+=adj[g2][curr.lst]-adj[g2][curr.lst-1];
    return curr;
}
node godown(node curr)
{
    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+=adj[g2][curr.lst]-adj[g2][curr.lst-1];
    return curr;
}
node shift(node curr)
{
    g=ord[curr.layer];
    curr.lst++;
    curr.sum+=adj[g][curr.lst]-adj[g][curr.lst-1];
    return curr;
}
node fixborderandshift(node curr)
{
    g=ord[curr.layer];
    curr.rghtbord=curr.lst-1;
    curr.lst=curr.bitipref;
    curr.bitipref--;
    curr.sum+=adj[g][curr.lst]-adj[g][curr.lst-1];
    return curr;
}
node fixborderandcreate(node curr)
{
    g=ord[curr.layer];
    curr.rghtbord=curr.lst-1;
    curr.lst=0;
    curr.biti++;
    curr.sum+=init[g];
    return curr;
}
signed  main()
{
    int  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);
    }
    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(int 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
            {
                long long 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]]-adj[i][x[i]-1];
            }
        }
        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 g3=ord[0];
        if(x[g3]==0)
        {
            curr.layer=0;
            curr.sum=adj[g3][0];
            curr.bitipref=0;
            curr.lst=0;
            curr.biti=1;
            curr.rghtbord=adj[g3].size()-1;
            pq.push(curr);
        }
        else
        {
            curr.layer=0;
            curr.sum=adj[g3][x[g3]]-adj[g3][x[g3]-1];
            curr.bitipref=x[g3]-1;
            curr.lst=x[g3];
            curr.rghtbord=adj[g3].size()-1;
            curr.biti=x[g3];
            pq.push(curr);
        }
        while(pq.size() && k)
        {
            curr=pq.top();
            pq.pop();
            k--;
            cout<<curr.sum+sum<<'\n';
            g3=ord[curr.layer];
            if(x[g3]==0 && curr.biti==1 && curr.layer+1<=m && curr.lst==0)
                pq.push(skip(curr));
            else if(curr.lst==x[g3] && curr.bitipref==x[g3]-1 && curr.biti==x[g3] && curr.layer+1<=m)
                pq.push(skip(curr));
            if(curr.lst+1<=curr.rghtbord)
                pq.push(shift(curr));
            if(curr.bitipref>=1 && curr.lst>=curr.bitipref+1)
                pq.push(fixborderandshift(curr));
            else if(curr.bitipref==0 && curr.lst>=1 && curr.biti+1<=y[g3])
                pq.push(fixborderandcreate(curr));
            if(curr.layer+1<=m)
                pq.push(godown(curr));
        }
    }
    while(k--)
        cout<<-1<<'\n';
    return 0;
}

Compilation message

Main.cpp: In function 'int main()':
Main.cpp:126:29: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  126 |             if(adj[i].size()<x[i])
      |                ~~~~~~~~~~~~~^~~~~
Main.cpp:146:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  146 |                 for(int j=0; j<adj[i].size(); j++)
      |                              ~^~~~~~~~~~~~~~
Main.cpp:152:33: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  152 |                 if(adj[i].size()==x[i])
      |                    ~~~~~~~~~~~~~^~~~~~
Main.cpp:162:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  162 |     for(i=0; i<ord.size(); i++)
      |              ~^~~~~~~~~~~
Main.cpp:170:15: warning: unused variable 'curr2' [-Wunused-variable]
  170 |     node curr,curr2;
      |               ^~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 8536 KB Output is correct
2 Correct 5 ms 8540 KB Output is correct
3 Correct 5 ms 8664 KB Output is correct
4 Correct 5 ms 8576 KB Output is correct
5 Correct 7 ms 8540 KB Output is correct
6 Correct 6 ms 8540 KB Output is correct
7 Correct 5 ms 8540 KB Output is correct
8 Correct 4 ms 8540 KB Output is correct
9 Correct 4 ms 5980 KB Output is correct
10 Correct 6 ms 5628 KB Output is correct
11 Correct 3 ms 8228 KB Output is correct
12 Correct 4 ms 8284 KB Output is correct
13 Correct 4 ms 8540 KB Output is correct
14 Correct 5 ms 8632 KB Output is correct
15 Correct 3 ms 8284 KB Output is correct
16 Correct 4 ms 8536 KB Output is correct
17 Correct 5 ms 8660 KB Output is correct
18 Correct 4 ms 8364 KB Output is correct
19 Correct 5 ms 8540 KB Output is correct
20 Correct 5 ms 8660 KB Output is correct
21 Correct 3 ms 8024 KB Output is correct
22 Correct 3 ms 8536 KB Output is correct
23 Correct 4 ms 8540 KB Output is correct
24 Correct 4 ms 8536 KB Output is correct
25 Correct 4 ms 6076 KB Output is correct
26 Correct 5 ms 8792 KB Output is correct
27 Correct 5 ms 8636 KB Output is correct
28 Correct 4 ms 8540 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 60 ms 25996 KB Output is correct
2 Correct 65 ms 25712 KB Output is correct
3 Correct 69 ms 25764 KB Output is correct
4 Correct 64 ms 26032 KB Output is correct
5 Correct 53 ms 18884 KB Output is correct
6 Correct 60 ms 17340 KB Output is correct
7 Correct 65 ms 25532 KB Output is correct
8 Correct 62 ms 25564 KB Output is correct
9 Correct 12 ms 8624 KB Output is correct
10 Correct 62 ms 25948 KB Output is correct
11 Correct 13 ms 8796 KB Output is correct
12 Correct 31 ms 9932 KB Output is correct
13 Correct 73 ms 25524 KB Output is correct
14 Correct 65 ms 25916 KB Output is correct
15 Correct 13 ms 8796 KB Output is correct
16 Correct 71 ms 25516 KB Output is correct
17 Correct 67 ms 25776 KB Output is correct
18 Correct 20 ms 9172 KB Output is correct
19 Correct 63 ms 25808 KB Output is correct
20 Correct 61 ms 26292 KB Output is correct
21 Correct 13 ms 8792 KB Output is correct
22 Correct 55 ms 18640 KB Output is correct
23 Correct 59 ms 25268 KB Output is correct
24 Correct 13 ms 8792 KB Output is correct
25 Correct 12 ms 8792 KB Output is correct
26 Correct 55 ms 17860 KB Output is correct
27 Correct 49 ms 17564 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 8536 KB Output is correct
2 Correct 5 ms 8540 KB Output is correct
3 Correct 5 ms 8664 KB Output is correct
4 Correct 5 ms 8576 KB Output is correct
5 Correct 7 ms 8540 KB Output is correct
6 Correct 6 ms 8540 KB Output is correct
7 Correct 5 ms 8540 KB Output is correct
8 Correct 4 ms 8540 KB Output is correct
9 Correct 4 ms 5980 KB Output is correct
10 Correct 6 ms 5628 KB Output is correct
11 Correct 3 ms 8228 KB Output is correct
12 Correct 4 ms 8284 KB Output is correct
13 Correct 4 ms 8540 KB Output is correct
14 Correct 5 ms 8632 KB Output is correct
15 Correct 3 ms 8284 KB Output is correct
16 Correct 4 ms 8536 KB Output is correct
17 Correct 5 ms 8660 KB Output is correct
18 Correct 4 ms 8364 KB Output is correct
19 Correct 5 ms 8540 KB Output is correct
20 Correct 5 ms 8660 KB Output is correct
21 Correct 3 ms 8024 KB Output is correct
22 Correct 3 ms 8536 KB Output is correct
23 Correct 4 ms 8540 KB Output is correct
24 Correct 4 ms 8536 KB Output is correct
25 Correct 4 ms 6076 KB Output is correct
26 Correct 5 ms 8792 KB Output is correct
27 Correct 5 ms 8636 KB Output is correct
28 Correct 4 ms 8540 KB Output is correct
29 Correct 60 ms 25996 KB Output is correct
30 Correct 65 ms 25712 KB Output is correct
31 Correct 69 ms 25764 KB Output is correct
32 Correct 64 ms 26032 KB Output is correct
33 Correct 53 ms 18884 KB Output is correct
34 Correct 60 ms 17340 KB Output is correct
35 Correct 65 ms 25532 KB Output is correct
36 Correct 62 ms 25564 KB Output is correct
37 Correct 12 ms 8624 KB Output is correct
38 Correct 62 ms 25948 KB Output is correct
39 Correct 13 ms 8796 KB Output is correct
40 Correct 31 ms 9932 KB Output is correct
41 Correct 73 ms 25524 KB Output is correct
42 Correct 65 ms 25916 KB Output is correct
43 Correct 13 ms 8796 KB Output is correct
44 Correct 71 ms 25516 KB Output is correct
45 Correct 67 ms 25776 KB Output is correct
46 Correct 20 ms 9172 KB Output is correct
47 Correct 63 ms 25808 KB Output is correct
48 Correct 61 ms 26292 KB Output is correct
49 Correct 13 ms 8792 KB Output is correct
50 Correct 55 ms 18640 KB Output is correct
51 Correct 59 ms 25268 KB Output is correct
52 Correct 13 ms 8792 KB Output is correct
53 Correct 12 ms 8792 KB Output is correct
54 Correct 55 ms 17860 KB Output is correct
55 Correct 49 ms 17564 KB Output is correct
56 Correct 147 ms 35384 KB Output is correct
57 Correct 175 ms 33088 KB Output is correct
58 Correct 139 ms 33852 KB Output is correct
59 Correct 146 ms 32308 KB Output is correct
60 Correct 140 ms 27444 KB Output is correct
61 Correct 131 ms 33900 KB Output is correct
62 Correct 135 ms 30988 KB Output is correct
63 Correct 108 ms 28944 KB Output is correct
64 Correct 68 ms 13132 KB Output is correct
65 Correct 137 ms 33372 KB Output is correct
66 Correct 53 ms 14420 KB Output is correct
67 Correct 54 ms 12148 KB Output is correct
68 Correct 77 ms 26300 KB Output is correct
69 Correct 140 ms 33592 KB Output is correct
70 Correct 14 ms 9048 KB Output is correct
71 Correct 72 ms 26544 KB Output is correct
72 Correct 127 ms 32056 KB Output is correct
73 Correct 13 ms 8796 KB Output is correct
74 Correct 66 ms 18868 KB Output is correct
75 Correct 199 ms 35716 KB Output is correct
76 Correct 14 ms 8648 KB Output is correct
77 Correct 59 ms 18108 KB Output is correct
78 Correct 105 ms 29104 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 42 ms 10712 KB Output is correct
2 Correct 39 ms 9536 KB Output is correct
3 Correct 13 ms 8796 KB Output is correct
4 Correct 13 ms 8776 KB Output is correct
5 Correct 206 ms 30524 KB Output is correct
6 Correct 143 ms 29252 KB Output is correct
7 Correct 144 ms 29748 KB Output is correct
8 Correct 137 ms 28728 KB Output is correct
9 Correct 152 ms 30776 KB Output is correct
10 Correct 174 ms 29372 KB Output is correct
11 Correct 170 ms 27708 KB Output is correct
12 Correct 120 ms 28332 KB Output is correct
13 Correct 101 ms 12184 KB Output is correct
14 Correct 142 ms 29248 KB Output is correct
15 Correct 146 ms 29324 KB Output is correct
16 Correct 60 ms 18176 KB Output is correct
17 Correct 79 ms 26044 KB Output is correct
18 Correct 148 ms 29488 KB Output is correct
19 Correct 67 ms 26300 KB Output is correct
20 Correct 72 ms 25792 KB Output is correct
21 Correct 135 ms 28592 KB Output is correct
22 Correct 60 ms 18368 KB Output is correct
23 Correct 79 ms 26048 KB Output is correct
24 Correct 149 ms 30772 KB Output is correct
25 Correct 61 ms 26292 KB Output is correct
26 Correct 62 ms 26316 KB Output is correct
27 Correct 123 ms 27996 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 8536 KB Output is correct
2 Correct 5 ms 8540 KB Output is correct
3 Correct 5 ms 8664 KB Output is correct
4 Correct 5 ms 8576 KB Output is correct
5 Correct 7 ms 8540 KB Output is correct
6 Correct 6 ms 8540 KB Output is correct
7 Correct 5 ms 8540 KB Output is correct
8 Correct 4 ms 8540 KB Output is correct
9 Correct 4 ms 5980 KB Output is correct
10 Correct 6 ms 5628 KB Output is correct
11 Correct 3 ms 8228 KB Output is correct
12 Correct 4 ms 8284 KB Output is correct
13 Correct 4 ms 8540 KB Output is correct
14 Correct 5 ms 8632 KB Output is correct
15 Correct 3 ms 8284 KB Output is correct
16 Correct 4 ms 8536 KB Output is correct
17 Correct 5 ms 8660 KB Output is correct
18 Correct 4 ms 8364 KB Output is correct
19 Correct 5 ms 8540 KB Output is correct
20 Correct 5 ms 8660 KB Output is correct
21 Correct 3 ms 8024 KB Output is correct
22 Correct 3 ms 8536 KB Output is correct
23 Correct 4 ms 8540 KB Output is correct
24 Correct 4 ms 8536 KB Output is correct
25 Correct 4 ms 6076 KB Output is correct
26 Correct 5 ms 8792 KB Output is correct
27 Correct 5 ms 8636 KB Output is correct
28 Correct 4 ms 8540 KB Output is correct
29 Correct 60 ms 25996 KB Output is correct
30 Correct 65 ms 25712 KB Output is correct
31 Correct 69 ms 25764 KB Output is correct
32 Correct 64 ms 26032 KB Output is correct
33 Correct 53 ms 18884 KB Output is correct
34 Correct 60 ms 17340 KB Output is correct
35 Correct 65 ms 25532 KB Output is correct
36 Correct 62 ms 25564 KB Output is correct
37 Correct 12 ms 8624 KB Output is correct
38 Correct 62 ms 25948 KB Output is correct
39 Correct 13 ms 8796 KB Output is correct
40 Correct 31 ms 9932 KB Output is correct
41 Correct 73 ms 25524 KB Output is correct
42 Correct 65 ms 25916 KB Output is correct
43 Correct 13 ms 8796 KB Output is correct
44 Correct 71 ms 25516 KB Output is correct
45 Correct 67 ms 25776 KB Output is correct
46 Correct 20 ms 9172 KB Output is correct
47 Correct 63 ms 25808 KB Output is correct
48 Correct 61 ms 26292 KB Output is correct
49 Correct 13 ms 8792 KB Output is correct
50 Correct 55 ms 18640 KB Output is correct
51 Correct 59 ms 25268 KB Output is correct
52 Correct 13 ms 8792 KB Output is correct
53 Correct 12 ms 8792 KB Output is correct
54 Correct 55 ms 17860 KB Output is correct
55 Correct 49 ms 17564 KB Output is correct
56 Correct 147 ms 35384 KB Output is correct
57 Correct 175 ms 33088 KB Output is correct
58 Correct 139 ms 33852 KB Output is correct
59 Correct 146 ms 32308 KB Output is correct
60 Correct 140 ms 27444 KB Output is correct
61 Correct 131 ms 33900 KB Output is correct
62 Correct 135 ms 30988 KB Output is correct
63 Correct 108 ms 28944 KB Output is correct
64 Correct 68 ms 13132 KB Output is correct
65 Correct 137 ms 33372 KB Output is correct
66 Correct 53 ms 14420 KB Output is correct
67 Correct 54 ms 12148 KB Output is correct
68 Correct 77 ms 26300 KB Output is correct
69 Correct 140 ms 33592 KB Output is correct
70 Correct 14 ms 9048 KB Output is correct
71 Correct 72 ms 26544 KB Output is correct
72 Correct 127 ms 32056 KB Output is correct
73 Correct 13 ms 8796 KB Output is correct
74 Correct 66 ms 18868 KB Output is correct
75 Correct 199 ms 35716 KB Output is correct
76 Correct 14 ms 8648 KB Output is correct
77 Correct 59 ms 18108 KB Output is correct
78 Correct 105 ms 29104 KB Output is correct
79 Correct 42 ms 10712 KB Output is correct
80 Correct 39 ms 9536 KB Output is correct
81 Correct 13 ms 8796 KB Output is correct
82 Correct 13 ms 8776 KB Output is correct
83 Correct 206 ms 30524 KB Output is correct
84 Correct 143 ms 29252 KB Output is correct
85 Correct 144 ms 29748 KB Output is correct
86 Correct 137 ms 28728 KB Output is correct
87 Correct 152 ms 30776 KB Output is correct
88 Correct 174 ms 29372 KB Output is correct
89 Correct 170 ms 27708 KB Output is correct
90 Correct 120 ms 28332 KB Output is correct
91 Correct 101 ms 12184 KB Output is correct
92 Correct 142 ms 29248 KB Output is correct
93 Correct 146 ms 29324 KB Output is correct
94 Correct 60 ms 18176 KB Output is correct
95 Correct 79 ms 26044 KB Output is correct
96 Correct 148 ms 29488 KB Output is correct
97 Correct 67 ms 26300 KB Output is correct
98 Correct 72 ms 25792 KB Output is correct
99 Correct 135 ms 28592 KB Output is correct
100 Correct 60 ms 18368 KB Output is correct
101 Correct 79 ms 26048 KB Output is correct
102 Correct 149 ms 30772 KB Output is correct
103 Correct 61 ms 26292 KB Output is correct
104 Correct 62 ms 26316 KB Output is correct
105 Correct 123 ms 27996 KB Output is correct
106 Correct 35 ms 9180 KB Output is correct
107 Correct 42 ms 10820 KB Output is correct
108 Correct 38 ms 9720 KB Output is correct
109 Correct 49 ms 10756 KB Output is correct
110 Correct 165 ms 35400 KB Output is correct
111 Correct 192 ms 34404 KB Output is correct
112 Correct 177 ms 34348 KB Output is correct
113 Correct 164 ms 33152 KB Output is correct
114 Correct 198 ms 35540 KB Output is correct
115 Correct 190 ms 34100 KB Output is correct
116 Correct 171 ms 49844 KB Output is correct
117 Correct 140 ms 32036 KB Output is correct
118 Correct 125 ms 17384 KB Output is correct
119 Correct 61 ms 14420 KB Output is correct
120 Correct 177 ms 33828 KB Output is correct
121 Correct 70 ms 26552 KB Output is correct
122 Correct 98 ms 26336 KB Output is correct
123 Correct 157 ms 34432 KB Output is correct
124 Correct 64 ms 18384 KB Output is correct
125 Correct 87 ms 26036 KB Output is correct
126 Correct 163 ms 33648 KB Output is correct
127 Correct 59 ms 19152 KB Output is correct
128 Correct 83 ms 26548 KB Output is correct
129 Correct 170 ms 35740 KB Output is correct
130 Correct 67 ms 26300 KB Output is correct
131 Correct 79 ms 26292 KB Output is correct
132 Correct 151 ms 31956 KB Output is correct