Submission #1175183


Source Code Expand

#define _USE_MATH_DEFINES
#include <cstdio>
#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <complex>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <bitset>
#include <numeric>
#include <limits>
#include <climits>
#include <cfloat>
#include <functional>
#include <iterator>
using namespace std;

bool getTankSet(int d, const vector<int>& amount, bitset<32>& ans)
{
    int n = amount.size();
    for(int i=0; i<(1<<n); ++i){
        bitset<32> bs(i);
        int sum = 0;
        for(int j=0; j<n; ++j){
            if(bs[j]){
                if(amount[j] == 0){
                    sum = 0;
                    break;
                }
                sum += amount[j];
            }
        }
        if(sum == d){
            ans = bs;
            return true;
        }
    }
    return false;
}

void solve(int d, int t, const vector<int>& capacity, const vector<int>& amount)
{
    int n = capacity.size();
    const int dMin = 30;
    const int capacityMin = 4;

    if(dMin <= d){
        bitset<32> bs;
        if(getTankSet(d, amount, bs)){
            cout << "sell " << bs.count();
            for(int i=0; i<n; ++i){
                if(bs[i])
                    cout << ' ' << (i + 1);
            }
            cout << endl;
            return;
        }

        if(t > 1){
            for(int i=0; i<(1<<n); ++i){
                bitset<32> bs(i);
                if(t <= bs.count())
                    continue;
                vector<int> amount2 = amount;
                for(int j=0; j<n; ++j){
                    if(bs[j])
                        amount2[j] = capacity[j];
                }
                bitset<32> tmp;
                if(getTankSet(d, amount2, tmp)){
                    for(int j=0; j<n; ++j){
                        if(bs[j]){
                            cout << "fill " << (j + 1) << endl;
                            return;
                        }
                    }
                }
            }

            for(int i=0; i<n; ++i){
                for(int j=0; j<n; ++j){
                    if(i == j)
                        continue;
                    vector<int> amount2 = amount;
                    int move = min(amount2[i], capacity[j] - amount2[j]);
                    amount2[i] -= move;
                    amount2[j] += move;
                    bitset<32> bs;
                    if(getTankSet(d, amount2, bs)){
                        cout << "move " << (i + 1) << ' ' << (j + 1) << endl;
                        return;
                    }

                    if(t > 2){
                        for(int k=0; k<n; ++k){
                            if(k == i)
                                continue;
                            move = min(amount2[k], capacity[i] - amount2[i]);
                            amount2[k] -= move;
                            amount2[i] += move;
                            bitset<32> bs;
                            if(getTankSet(d, amount2, bs)){
                                cout << "move " << (i + 1) << ' ' << (j + 1) << endl;
                                return;
                            }
                        }
                    }
                }
            }
        }
    }

    int index = -1;
    int maxIncrement = 0;
    for(int i=0; i<n; ++i){
        if(capacityMin <= capacity[i]){
            int increment = capacity[i] - amount[i];
            if(maxIncrement < increment){
                maxIncrement = increment;
                index = i;
            }
        }
    }
    if(index != -1){
        cout << "fill " << (index + 1) << endl;
        return;
    }

    index = min_element(capacity.begin(), capacity.end()) - capacity.begin();
    if(capacity[index] < capacityMin){
        cout << "change " << (index + 1) << endl;
        return;
    }

    cout << "pass" << endl;
}

int main()
{
    const int n = 8;
    const int maxTurn = 1000;

    for(int turn=0; turn<maxTurn; ++turn){
        int d, t;
        cin >> d >> t;
        vector<int> capacity(n), amount(n);
        for(int i=0; i<n; ++i)
            cin >> capacity[i];
        for(int i=0; i<n; ++i)
            cin >> amount[i];

        solve(d, t, capacity, amount);
    }
}

Submission Info

Submission Time
Task A - 石油王Xの憂鬱
User mamekin
Language C++14 (GCC 5.4.1)
Score 7405332
Code Size 4513 Byte
Status AC
Exec Time 311 ms
Memory 724 KB

Judge Result

Set Name test_01 test_02 test_03 test_04 test_05 test_06 test_07 test_08 test_09 test_10 test_11 test_12 test_13 test_14 test_15 test_16 test_17 test_18 test_19 test_20 test_21 test_22 test_23 test_24 test_25 test_26 test_27 test_28 test_29 test_30 test_31 test_32 test_33 test_34 test_35 test_36 test_37 test_38 test_39 test_40 test_41 test_42 test_43 test_44 test_45 test_46 test_47 test_48 test_49 test_50
Score / Max Score 143844 / 417500 140250 / 417500 147154 / 417500 143777 / 417500 143937 / 417500 150376 / 417500 149298 / 417500 150171 / 417500 150597 / 417500 150358 / 417500 155888 / 417500 146900 / 417500 159776 / 417500 148921 / 417500 154601 / 417500 150567 / 417500 141516 / 417500 143684 / 417500 149516 / 417500 146903 / 417500 149205 / 417500 149767 / 417500 138844 / 417500 154484 / 417500 142612 / 417500 147932 / 417500 146399 / 417500 146571 / 417500 152975 / 417500 152378 / 417500 157428 / 417500 148242 / 417500 148388 / 417500 152857 / 417500 153311 / 417500 160741 / 417500 139439 / 417500 148004 / 417500 142598 / 417500 142991 / 417500 140801 / 417500 142728 / 417500 148380 / 417500 148670 / 417500 152235 / 417500 147937 / 417500 152622 / 417500 143041 / 417500 137568 / 417500 148150 / 417500
Status
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
Set Name Test Cases
test_01 subtask_01_01.txt
test_02 subtask_01_02.txt
test_03 subtask_01_03.txt
test_04 subtask_01_04.txt
test_05 subtask_01_05.txt
test_06 subtask_01_06.txt
test_07 subtask_01_07.txt
test_08 subtask_01_08.txt
test_09 subtask_01_09.txt
test_10 subtask_01_10.txt
test_11 subtask_01_11.txt
test_12 subtask_01_12.txt
test_13 subtask_01_13.txt
test_14 subtask_01_14.txt
test_15 subtask_01_15.txt
test_16 subtask_01_16.txt
test_17 subtask_01_17.txt
test_18 subtask_01_18.txt
test_19 subtask_01_19.txt
test_20 subtask_01_20.txt
test_21 subtask_01_21.txt
test_22 subtask_01_22.txt
test_23 subtask_01_23.txt
test_24 subtask_01_24.txt
test_25 subtask_01_25.txt
test_26 subtask_01_26.txt
test_27 subtask_01_27.txt
test_28 subtask_01_28.txt
test_29 subtask_01_29.txt
test_30 subtask_01_30.txt
test_31 subtask_01_31.txt
test_32 subtask_01_32.txt
test_33 subtask_01_33.txt
test_34 subtask_01_34.txt
test_35 subtask_01_35.txt
test_36 subtask_01_36.txt
test_37 subtask_01_37.txt
test_38 subtask_01_38.txt
test_39 subtask_01_39.txt
test_40 subtask_01_40.txt
test_41 subtask_01_41.txt
test_42 subtask_01_42.txt
test_43 subtask_01_43.txt
test_44 subtask_01_44.txt
test_45 subtask_01_45.txt
test_46 subtask_01_46.txt
test_47 subtask_01_47.txt
test_48 subtask_01_48.txt
test_49 subtask_01_49.txt
test_50 subtask_01_50.txt
Case Name Status Exec Time Memory
subtask_01_01.txt AC 197 ms 720 KB
subtask_01_02.txt AC 221 ms 720 KB
subtask_01_03.txt AC 194 ms 724 KB
subtask_01_04.txt AC 311 ms 720 KB
subtask_01_05.txt AC 249 ms 720 KB
subtask_01_06.txt AC 219 ms 696 KB
subtask_01_07.txt AC 197 ms 720 KB
subtask_01_08.txt AC 210 ms 596 KB
subtask_01_09.txt AC 213 ms 724 KB
subtask_01_10.txt AC 249 ms 720 KB
subtask_01_11.txt AC 192 ms 720 KB
subtask_01_12.txt AC 228 ms 720 KB
subtask_01_13.txt AC 270 ms 720 KB
subtask_01_14.txt AC 262 ms 720 KB
subtask_01_15.txt AC 182 ms 720 KB
subtask_01_16.txt AC 211 ms 720 KB
subtask_01_17.txt AC 208 ms 720 KB
subtask_01_18.txt AC 207 ms 724 KB
subtask_01_19.txt AC 221 ms 724 KB
subtask_01_20.txt AC 196 ms 720 KB
subtask_01_21.txt AC 192 ms 704 KB
subtask_01_22.txt AC 200 ms 720 KB
subtask_01_23.txt AC 263 ms 720 KB
subtask_01_24.txt AC 209 ms 700 KB
subtask_01_25.txt AC 208 ms 720 KB
subtask_01_26.txt AC 205 ms 724 KB
subtask_01_27.txt AC 228 ms 720 KB
subtask_01_28.txt AC 218 ms 724 KB
subtask_01_29.txt AC 243 ms 716 KB
subtask_01_30.txt AC 270 ms 720 KB
subtask_01_31.txt AC 218 ms 716 KB
subtask_01_32.txt AC 167 ms 716 KB
subtask_01_33.txt AC 183 ms 716 KB
subtask_01_34.txt AC 218 ms 724 KB
subtask_01_35.txt AC 231 ms 720 KB
subtask_01_36.txt AC 241 ms 720 KB
subtask_01_37.txt AC 226 ms 720 KB
subtask_01_38.txt AC 230 ms 696 KB
subtask_01_39.txt AC 226 ms 720 KB
subtask_01_40.txt AC 225 ms 716 KB
subtask_01_41.txt AC 167 ms 720 KB
subtask_01_42.txt AC 252 ms 720 KB
subtask_01_43.txt AC 212 ms 720 KB
subtask_01_44.txt AC 222 ms 716 KB
subtask_01_45.txt AC 166 ms 720 KB
subtask_01_46.txt AC 238 ms 720 KB
subtask_01_47.txt AC 214 ms 720 KB
subtask_01_48.txt AC 224 ms 716 KB
subtask_01_49.txt AC 264 ms 720 KB
subtask_01_50.txt AC 192 ms 592 KB