답안 #836924

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
836924 2023-08-24T17:17:28 Z azberjibiou Cookies (JOI23_cookies) C++17
7 / 100
345 ms 52664 KB
#include <bits/stdc++.h>
#define all(v) v.begin(), v.end()
#define gibon ios::sync_with_stdio(false); cin.tie(0);
#define fi first
#define se second
#define pdd pair<long double, long double>
#define pii pair<int, int>
#define pll pair<ll, ll>
#define ppi pair<pii, pii>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
typedef long long ll;
using namespace std;
const int mxN=15003;
const int mxM=10004;
const int MOD=1e9+7;
const ll INF=8e18;
int dx[4]={1, 0, -1, 0}, dy[4]={0, 1, 0, -1};
int N, M, K;
int A[mxN], B[mxN], c[mxN], ci[mxN];
int cnt[mxN], S[mxN];
bitset <15003> X[147000];
bitset <15003> tX, nX;
int ans;
void solv(vector <int> v)
{
    cout << v.size() << '\n';
    priority_queue <pii> pq;
    for(int i=1;i<=N;i++)   pq.emplace(A[i], i);
    for(int x : v)
    {
        cout << B[x] << " ";
        vector <pii> tmp;
        for(int i=0;i<B[x];i++)
        {
            tmp.push_back(pq.top());
            pq.pop();
        }
        for(auto [a, b] : tmp)  cout << b << " ";
        cout << '\n';
        for(auto [a, b] : tmp)  if(a!=1)    pq.emplace(a-1, b);
    }
}
int main()
{
    gibon
    cin >> N;
    for(int i=1;i<=N;i++)   cin >> A[i], K+=A[i];
    for(int i=1;i<=N;i++)   for(int j=1;j<=A[i];j++)    cnt[j]++;
    for(int i=1;i<=K;i++)   S[i]=S[i-1]+cnt[i];
    for(int i=1;i<=K;i++)   c[i]=c[i-1]+K/i;
    cin >> M;
    for(int i=1;i<=M;i++)   cin >> B[i];
    B[M+1]=K+1;
    for(int i=1;i<=M;i++)   if(B[i]<=S[1])  X[i][B[i]]=1;
    if(B[M]==K) ans=1;

    for(int i=1;i<K;i++)    if(ans==0)
    {
        tX.reset();
        nX.reset();
        for(int j=0;j<=S[i+1]-B[M];j++)  tX[j]=1;
        for(int j=M;j>=1;j--)
        {
            for(int k=max(0, S[i+1]-B[j+1]+1);k<=S[i+1]-B[j];k++)   tX[k]=1;
            if(B[j]>K/(i+1))    continue;
            nX|=X[c[i-1]+j];
            X[c[i]+j]=((nX&tX)<<B[j]);
        }
        //for(int j=0;j<=K;j++)   printf("dp[%d][%d]=(%d, %d)\n", i, j, dp[i][j].fi, dp[i][j].se);
        for(int j=1;j<=M;j++)
        {
            if(B[j]<=K/(i+1) && X[c[i]+j][K]==1)    ans=i+1;
        }
    }
    if(ans==0)
    {
        cout << -1;
        return 0;
    }
    vector <int> v;
    int cur=K;
    for(int i=ans;i>=1;i--)
    {
        int nv=0;
        for(int j=1;j<=M;j++)   if(B[j]<=K/i && X[c[i-1]+j][cur]) nv=j;
        v.push_back(nv);
        cur-=B[nv];
    }
    solv(v);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 2 ms 2132 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 1 ms 1748 KB Output is correct
11 Correct 1 ms 748 KB Output is correct
12 Correct 1 ms 1236 KB Output is correct
13 Correct 1 ms 1876 KB Output is correct
14 Correct 1 ms 1108 KB Output is correct
15 Correct 1 ms 1236 KB Output is correct
16 Correct 1 ms 980 KB Output is correct
17 Correct 1 ms 596 KB Output is correct
18 Correct 1 ms 596 KB Output is correct
19 Correct 0 ms 468 KB Output is correct
20 Correct 0 ms 340 KB Output is correct
21 Incorrect 1 ms 596 KB Output isn't correct
22 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 2 ms 2132 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 2 ms 2132 KB Output is correct
9 Correct 18 ms 10852 KB Output is correct
10 Correct 345 ms 52664 KB Output is correct
11 Correct 0 ms 340 KB Output is correct
12 Correct 0 ms 340 KB Output is correct
13 Correct 0 ms 340 KB Output is correct
14 Correct 0 ms 340 KB Output is correct
15 Correct 0 ms 340 KB Output is correct
16 Correct 1 ms 596 KB Output is correct
17 Correct 1 ms 596 KB Output is correct
18 Correct 105 ms 22620 KB Output is correct
19 Correct 219 ms 29576 KB Output is correct
20 Correct 14 ms 1876 KB Output is correct
21 Correct 4 ms 1004 KB Output is correct
22 Correct 4 ms 1236 KB Output is correct
23 Correct 0 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Correct 0 ms 340 KB Output is correct
12 Correct 0 ms 340 KB Output is correct
13 Correct 0 ms 340 KB Output is correct
14 Correct 0 ms 340 KB Output is correct
15 Incorrect 1 ms 340 KB Output isn't correct
16 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 2 ms 2132 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 1 ms 1748 KB Output is correct
11 Correct 1 ms 748 KB Output is correct
12 Correct 1 ms 1236 KB Output is correct
13 Correct 1 ms 1876 KB Output is correct
14 Correct 1 ms 1108 KB Output is correct
15 Correct 1 ms 1236 KB Output is correct
16 Correct 1 ms 980 KB Output is correct
17 Correct 1 ms 596 KB Output is correct
18 Correct 1 ms 596 KB Output is correct
19 Correct 0 ms 468 KB Output is correct
20 Correct 0 ms 340 KB Output is correct
21 Incorrect 1 ms 596 KB Output isn't correct
22 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 2 ms 2132 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 1 ms 1748 KB Output is correct
11 Correct 1 ms 748 KB Output is correct
12 Correct 1 ms 1236 KB Output is correct
13 Correct 1 ms 1876 KB Output is correct
14 Correct 1 ms 1108 KB Output is correct
15 Correct 1 ms 1236 KB Output is correct
16 Correct 1 ms 980 KB Output is correct
17 Correct 1 ms 596 KB Output is correct
18 Correct 1 ms 596 KB Output is correct
19 Correct 0 ms 468 KB Output is correct
20 Correct 0 ms 340 KB Output is correct
21 Incorrect 1 ms 596 KB Output isn't correct
22 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 2 ms 2132 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 1 ms 1748 KB Output is correct
11 Correct 1 ms 748 KB Output is correct
12 Correct 1 ms 1236 KB Output is correct
13 Correct 1 ms 1876 KB Output is correct
14 Correct 1 ms 1108 KB Output is correct
15 Correct 1 ms 1236 KB Output is correct
16 Correct 1 ms 980 KB Output is correct
17 Correct 1 ms 596 KB Output is correct
18 Correct 1 ms 596 KB Output is correct
19 Correct 0 ms 468 KB Output is correct
20 Correct 0 ms 340 KB Output is correct
21 Incorrect 1 ms 596 KB Output isn't correct
22 Halted 0 ms 0 KB -