Submission #1174152


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;

#ifdef _WIN32
#include <Windows.h>
#else
#include <sys/time.h>
#endif

class TicToc
{
private:
    double getCurrTime(){
    #ifdef _WIN32
        return GetTickCount() * 1e-3;
    #else
        struct timeval tv;
        gettimeofday(&tv, NULL);
        return tv.tv_sec + tv.tv_usec * 1e-6;
    #endif
    }
    double startTime;
public:
    void tic(){
        startTime = getCurrTime();
    }
    double toc(){
        return getCurrTime() - startTime;
    }
};

unsigned xor128(){
    static unsigned x=123456789,y=362436069,z=521288629,w=88675123;
    unsigned t;
    t=(x^(x<<11));x=y;y=z;z=w; return( w=(w^(w>>19))^(t^(t>>8)) );
}

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;
                    }
                }
            }
        }
    }

    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 7400805
Code Size 4530 Byte
Status AC
Exec Time 171 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 137229 / 417500 140250 / 417500 147154 / 417500 143777 / 417500 143937 / 417500 150376 / 417500 155169 / 417500 150171 / 417500 147847 / 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 147975 / 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 141915 / 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 119 ms 720 KB
subtask_01_02.txt AC 125 ms 588 KB
subtask_01_03.txt AC 113 ms 720 KB
subtask_01_04.txt AC 171 ms 720 KB
subtask_01_05.txt AC 141 ms 720 KB
subtask_01_06.txt AC 130 ms 716 KB
subtask_01_07.txt AC 128 ms 720 KB
subtask_01_08.txt AC 119 ms 724 KB
subtask_01_09.txt AC 137 ms 720 KB
subtask_01_10.txt AC 142 ms 596 KB
subtask_01_11.txt AC 117 ms 720 KB
subtask_01_12.txt AC 136 ms 720 KB
subtask_01_13.txt AC 152 ms 656 KB
subtask_01_14.txt AC 149 ms 596 KB
subtask_01_15.txt AC 116 ms 720 KB
subtask_01_16.txt AC 127 ms 712 KB
subtask_01_17.txt AC 123 ms 720 KB
subtask_01_18.txt AC 121 ms 720 KB
subtask_01_19.txt AC 140 ms 724 KB
subtask_01_20.txt AC 117 ms 716 KB
subtask_01_21.txt AC 117 ms 720 KB
subtask_01_22.txt AC 119 ms 724 KB
subtask_01_23.txt AC 149 ms 716 KB
subtask_01_24.txt AC 129 ms 720 KB
subtask_01_25.txt AC 127 ms 716 KB
subtask_01_26.txt AC 130 ms 720 KB
subtask_01_27.txt AC 132 ms 720 KB
subtask_01_28.txt AC 129 ms 724 KB
subtask_01_29.txt AC 148 ms 720 KB
subtask_01_30.txt AC 152 ms 716 KB
subtask_01_31.txt AC 139 ms 716 KB
subtask_01_32.txt AC 104 ms 720 KB
subtask_01_33.txt AC 107 ms 720 KB
subtask_01_34.txt AC 131 ms 716 KB
subtask_01_35.txt AC 140 ms 720 KB
subtask_01_36.txt AC 147 ms 724 KB
subtask_01_37.txt AC 129 ms 720 KB
subtask_01_38.txt AC 137 ms 720 KB
subtask_01_39.txt AC 135 ms 720 KB
subtask_01_40.txt AC 119 ms 720 KB
subtask_01_41.txt AC 108 ms 720 KB
subtask_01_42.txt AC 143 ms 720 KB
subtask_01_43.txt AC 130 ms 652 KB
subtask_01_44.txt AC 135 ms 720 KB
subtask_01_45.txt AC 114 ms 592 KB
subtask_01_46.txt AC 141 ms 716 KB
subtask_01_47.txt AC 130 ms 704 KB
subtask_01_48.txt AC 138 ms 720 KB
subtask_01_49.txt AC 157 ms 720 KB
subtask_01_50.txt AC 117 ms 720 KB