MENU

え、10重ループくらい10秒でかけますよね?これってゴリ押し解法なんですか?

これを

#define extrep(v,...) for(auto v:make_mat_impl({__VA_ARGS__}))
vector<vector<long long>> make_mat_impl(vector<long long> v){
    if(v.empty())return vector<vector<long long>>(1,vector<long long>());
    long long n=v.back();
    v.pop_back();
    vector<vector<long long>> ret;
    vector<vector<long long>> tmp=make_mat_impl(v);
    for(auto e:tmp)for(long long i=0;i<n;++i){
        ret.push_back(e);
        ret.back().push_back(i);
    }
    return ret;
}

こう

int main(){
    extrep(v,3,4,5){
        cout<<v[0]<<v[1]<<v[2]<<endl;
    }
}

出力結果

000
001
002
003
004
010
011
012
013
014
020
021
022
023
024
030
031
032
033
034
100
101
102
103
104
110
111
112
113
114
120
121
122
123
124
130
131
132
133
134
200
201
202
203
204
210
211
212
213
214
220
221
222
223
224
230
231
232
233
234

内部でDFSしてるだけです