Submission #258224

# Submission time Handle Problem Language Result Execution time Memory
258224 2020-08-05T14:58:55 Z cheeheng Devil's Share (RMI19_devil) C++14
27 / 100
421 ms 2168 KB
#include <bits/stdc++.h>
using namespace std;

int D[12];
int X[100005];
int ans[100005];

int main(){
    int T;
    scanf("%d", &T);

    while(T --){
        int K;
        scanf("%d", &K);

        int S = 0;
        for(int i = 1; i < 10; i ++){
            scanf("%d", &D[i]);
            S += D[i];
        }

        int cnt = 0;
        for(int i = 1; i < 10; i ++){
            for(int j = 0; j < D[i]; j ++){
                X[cnt++] = i;
            }
        }
        sort(X, X+S);

        bool subtask3 = true;
        for(int i = 3; i < 10; i ++){
            subtask3 &= (D[i] == 0);
        }

        if(K == 2){
            for(int i = 0; i < S; i ++){
                if(i%2 == 0){
                    ans[i] = X[S-1-i/2];
                }else{
                    ans[i] = X[i/2];
                }
            }

            reverse(ans, ans+S);

            for(int i = 0; i < S; i ++){
                printf("%d", ans[i]);
            }
            printf("\n");
            continue;
        }

        if(subtask3){
            if(D[2] < K || D[1] == 0){
                for(int i = 0; i < S; i ++){
                    printf("%d", X[i]);
                }
                printf("\n");
            }else{
                int num1 = D[1];
                int num2 = D[2]-K+1;
                int numConsecutive2 = 1+(num2-1)/num1;

                for(int i = 0; i <= S-K; i ++){
                    ans[S-K-i] = 2 - (((i*num1+num1-1) %(num1+num2)) < num1);
                }

                for(int i = S-K+1; i <= S; i ++){
                    ans[i] = 2;
                }

                /*
                long long tempMax = 0;
                for(int i = 0; i <= S-K; i ++){
                    long long temp = 0;
                    for(int j = i; j < i+K; j ++){
                        temp = temp*10+ans[j];
                    }
                    //printf("%lld\n", temp);
                    tempMax = max(tempMax, temp);
                }
                printf("tempMax=%lld\n", tempMax);
                */

                for(int i = 0; i < S; i ++){
                    printf("%d", ans[i]);
                }
                printf("\n");
            }
            continue;
        }

        long long minVal = 1LL << 62;
        do{
            long long tempMax = 0;

            for(int i = 0; i <= S-K; i ++){
                long long temp = 0;
                for(int j = i; j < i+K; j ++){
                    temp = temp*10+X[j];
                }
                //printf("%lld\n", temp);
                tempMax = max(tempMax, temp);
            }
            if(tempMax < minVal){
                for(int i = 0; i < S; i ++){
                    ans[i] = X[i];
                }
                minVal = tempMax;

                //printf("tempMax=%lld\n", tempMax);
            }
        }while(next_permutation(X, X+S));

        //printf("tempMax=%lld\n", minVal);

        for(int i = 0; i < S; i ++){
            printf("%d", ans[i]);
        }
        printf("\n");
    }

    return 0;
}

Compilation message

devil.cpp: In function 'int main()':
devil.cpp:62:21: warning: unused variable 'numConsecutive2' [-Wunused-variable]
                 int numConsecutive2 = 1+(num2-1)/num1;
                     ^~~~~~~~~~~~~~~
devil.cpp:10:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &T);
     ~~~~~^~~~~~~~~~
devil.cpp:14:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d", &K);
         ~~~~~^~~~~~~~~~
devil.cpp:18:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d", &D[i]);
             ~~~~~^~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 421 ms 416 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 149 ms 2044 KB Output is correct
2 Correct 115 ms 1784 KB Output is correct
3 Correct 118 ms 1776 KB Output is correct
4 Correct 162 ms 2168 KB Output is correct
5 Correct 93 ms 1272 KB Output is correct
6 Correct 87 ms 1272 KB Output is correct
7 Correct 92 ms 1272 KB Output is correct
8 Correct 93 ms 1400 KB Output is correct
9 Correct 89 ms 2040 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 109 ms 1784 KB Output is correct
2 Correct 100 ms 1528 KB Output is correct
3 Incorrect 98 ms 2040 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 421 ms 416 KB Output is correct
2 Correct 149 ms 2044 KB Output is correct
3 Correct 115 ms 1784 KB Output is correct
4 Correct 118 ms 1776 KB Output is correct
5 Correct 162 ms 2168 KB Output is correct
6 Correct 93 ms 1272 KB Output is correct
7 Correct 87 ms 1272 KB Output is correct
8 Correct 92 ms 1272 KB Output is correct
9 Correct 93 ms 1400 KB Output is correct
10 Correct 89 ms 2040 KB Output is correct
11 Correct 109 ms 1784 KB Output is correct
12 Correct 100 ms 1528 KB Output is correct
13 Incorrect 98 ms 2040 KB Output isn't correct
14 Halted 0 ms 0 KB -