CSES - Datatähti Open 2017 - Results
Submission details
Task:Program
Sender:Crinoid
Submission time:2017-01-22 13:45:07 +0200
Language:C++
Status:READY
Result:58
Feedback
groupverdictscore
#1ACCEPTED21
#2ACCEPTED37
#30
Test results
testverdicttimegroup
#1ACCEPTED0.04 s1details
#2ACCEPTED0.04 s1details
#3ACCEPTED0.04 s1details
#4ACCEPTED0.07 s1details
#5ACCEPTED0.05 s1details
#6ACCEPTED0.04 s1details
#7ACCEPTED0.04 s1details
#8ACCEPTED0.05 s1details
#9ACCEPTED0.03 s1details
#10ACCEPTED0.04 s1details
#11ACCEPTED0.10 s2details
#12ACCEPTED0.12 s2details
#13ACCEPTED0.11 s2details
#14ACCEPTED0.12 s2details
#15ACCEPTED0.12 s2details
#16ACCEPTED0.12 s2details
#17ACCEPTED0.11 s2details
#18ACCEPTED0.10 s2details
#19ACCEPTED0.10 s2details
#20ACCEPTED0.11 s2details
#210.22 s3details
#220.22 s3details
#230.18 s3details
#240.20 s3details
#250.21 s3details
#260.16 s3details
#270.20 s3details
#280.20 s3details
#290.19 s3details
#300.17 s3details

Code

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<long long, long long> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
const ll mod7 = 1000000007;

#define eb(x) emplace_back(x)
#define ef(x) emplace_front(x)
#define pb(x) push_back(x)
#define pf(x) push_front(x)
#define ob(x) pop_back(x)
#define of(x) pop_front(x)
#define mp(a, b) make_pair(a, b)

#define power(x, p) round(pow(x, (double)p))
#define all(x) x.begin(), x.end()
#define sortAs(x) sort(all(x));
#define sortDes(x) sort(all(x), std::greater<ll>());

#define fori(x) for (ll i = 0; i < x; i++)
#define forj(x) for (ll j = 0; j < x; j++)
#define fork(x) for (ll k = 0; k < x; k++)

#define ret(i, begin, end) for (__typeof(end) i = (begin) - ((begin) > (end)); i != (end) - ((begin) > (end)); i += 1 - 2 * ((begin) > (end)))
#define rep(u, s, x) for (ll u = s; u <= x; u++)
#define rem(u, x, s) for (ll u = s; u >= x; u--)

#define RET(t) cout << t << endl; return 0;
#define RETIF(i, t) if (i) { cout << t << endl; return 0; }
#define BREAKIF(i, t) if (i) { cout << t << endl; break; }
#define CONTIF(i, t) if (i) { cout << t << endl; continue; }

#define NEWLINE cout << endl;
#define DBG(args...) { vector<string> _v = split(#args, ','); err(_v.begin(), args); cout << endl; }

vector<string> split(const string& s, char c) {
	vector<string> v;
	stringstream ss(s);
	string x;
	while (getline(ss, x, c))
		v.emplace_back(x);
	return move(v);
}

void err(vector<string>::iterator it) {}
template<typename T, typename... Args>
void err(vector<string>::iterator it, T a, Args... args) {
	cout << it -> substr((*it)[0] == ' ', it -> length()) << ": " << a << " ";
	err(++it, args...);
}

#define DBGARRAY(x, s) cout << #x << ": "; for (int z = 0; z < s; z++) cout << x[z] << " "; cout << endl;
#define DBGVECTOR(x) cout << #x << ": "; for (ll z = 0; z < x.size(); z++) cout << x[z] << " "; cout << endl;
#define DBGVECTORPAR(x, p) cout << #x << ": "; for (ll z = 0; z < x.size(); z++) cout << x[z].p << " "; cout << endl;
#define DBGMAP(x) cout << #x << ":" << endl; for (auto z = x.begin(); z != x.end(); z++) { cout << z->first << ": " << z->second << endl; }
#define DBGSET(x) cout << #x << ":" << endl; for (auto z = x.begin(); z != x.end(); z++) { cout << *z << endl;}

bool isPrime(long long a) { if (a <= 1) return 0; for(long long i = 2; i * i <= a; i++) { if(a % i == 0) return 0; } return 1; }

ll lcm(ll a, ll b) { return __gcd(a, b) ? (a / __gcd(a, b) * b) : 0; }

template<typename T>
ll biggest(T x) {ll b_i = 0; fori(x.size()) {if (x[b_i] < x[i]) {b_i = i;} } return b_i;}
template<typename T>
ll smallest(T x) {ll s_i = 0; fori(x.size()) {if (x[s_i] > x[i]) {s_i = i;} } return s_i;}

template<typename T>
string tostring(T num) { stringstream convert; convert << num; return convert.str(); }
template<typename T>
ll tonumber(T stringNum) { ll a; stringstream convert; convert << stringNum; convert >> a; return a; }

struct Num
{
    ll score = INT_MAX * (ll)10;
    Num* from;
    string command;
};

ll A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z;
char C1, C2, C3, C4;
string S1, S2, S3, S4;
vl V1, V2, V3, V4;
bool B1, B2;

vector<Num> nums;

int main()
{
    std::ios_base::sync_with_stdio(0); cin.tie(0); cin.clear();

    cin >> N;

    nums.assign(N + 1, Num());

    nums[N].score = 0;

    rem(i, 1, N)
    {
        if (i % 2 == 0)
        {
            if (nums[i].score + 1 < nums[i / 2].score && nums[i].score < INT_MAX)
            {
//                DBG(i)
                nums[i / 2].score = nums[i].score + 1;
                nums[i / 2].from = &nums[i];
                nums[i / 2].command = "MUL";
            }
        }
        if (i - 3 >= 1)
        {
            if (nums[i].score + 1 < nums[i - 3].score && nums[i].score < INT_MAX)
            {
//                DBG(i, "ADD")
                nums[i - 3].score = nums[i].score + 1;
                nums[i - 3].from = &nums[i];
                nums[i - 3].command = "ADD";
            }
        }
    }

//    fori(N + 1)
//    {
//        DBG(i, nums[i].score, nums[i].command)
//    }

    if (nums[1].score >= INT_MAX)
    {
        cout << 0 << endl;
    }
    else
    {
        cout << nums[1].score + 1 << endl;
        Num* curr = &nums[1];
        fori(nums[1].score)
        {
            cout << curr->command << endl;
            curr = curr->from;
        }

        cout << "END" << endl;
    }
}

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
58

correct output
8
MUL
ADD
MUL
ADD
...

user output
8
ADD
ADD
ADD
ADD
...

Test 2

Group: 1

Verdict: ACCEPTED

input
72

correct output
0

user output
0

Test 3

Group: 1

Verdict: ACCEPTED

input
83

correct output
8
MUL
ADD
MUL
MUL
...

user output
8
ADD
ADD
ADD
MUL
...

Test 4

Group: 1

Verdict: ACCEPTED

input
53

correct output
8
ADD
MUL
ADD
MUL
...

user output
8
ADD
MUL
ADD
MUL
...

Test 5

Group: 1

Verdict: ACCEPTED

input
100

correct output
8
ADD
MUL
ADD
MUL
...

user output
8
ADD
MUL
ADD
MUL
...

Test 6

Group: 1

Verdict: ACCEPTED

input
64

correct output
6
ADD
MUL
MUL
MUL
...

user output
6
ADD
MUL
MUL
MUL
...

Test 7

Group: 1

Verdict: ACCEPTED

input
84

correct output
0

user output
0

Test 8

Group: 1

Verdict: ACCEPTED

input
60

correct output
0

user output
0

Test 9

Group: 1

Verdict: ACCEPTED

input
51

correct output
0

user output
0

Test 10

Group: 1

Verdict: ACCEPTED

input
77

correct output
9
ADD
ADD
MUL
ADD
...

user output
9
ADD
ADD
MUL
ADD
...

Test 11

Group: 2

Verdict: ACCEPTED

input
941694

correct output
0

user output
0

Test 12

Group: 2

Verdict: ACCEPTED

input
905674

correct output
30
MUL
ADD
MUL
ADD
...

user output
30
ADD
ADD
ADD
ADD
...

Test 13

Group: 2

Verdict: ACCEPTED

input
908426

correct output
29
ADD
MUL
ADD
MUL
...

user output
29
ADD
MUL
ADD
MUL
...

Test 14

Group: 2

Verdict: ACCEPTED

input
960500

correct output
31
ADD
ADD
MUL
MUL
...

user output
31
ADD
ADD
MUL
MUL
...

Test 15

Group: 2

Verdict: ACCEPTED

input
902101

correct output
27
MUL
ADD
MUL
ADD
...

user output
27
ADD
ADD
ADD
ADD
...

Test 16

Group: 2

Verdict: ACCEPTED

input
994208

correct output
27
ADD
ADD
MUL
MUL
...

user output
27
ADD
ADD
MUL
MUL
...

Test 17

Group: 2

Verdict: ACCEPTED

input
923538

correct output
0

user output
0

Test 18

Group: 2

Verdict: ACCEPTED

input
950287

correct output
24
MUL
ADD
MUL
ADD
...

user output
24
ADD
ADD
ADD
ADD
...

Test 19

Group: 2

Verdict: ACCEPTED

input
950516

correct output
29
ADD
ADD
MUL
MUL
...

user output
29
ADD
ADD
MUL
MUL
...

Test 20

Group: 2

Verdict: ACCEPTED

input
921882

correct output
0

user output
0

Test 21

Group: 3

Verdict:

input
933942296856681219

correct output
0

user output
(empty)

Error:
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

Test 22

Group: 3

Verdict:

input
955775764385016720

correct output
0

user output
(empty)

Error:
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

Test 23

Group: 3

Verdict:

input
981578916796073406

correct output
0

user output
(empty)

Error:
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

Test 24

Group: 3

Verdict:

input
927875200723222396

correct output
94
MUL
ADD
MUL
MUL
...

user output
(empty)

Error:
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

Test 25

Group: 3

Verdict:

input
990125206148420558

correct output
84
ADD
MUL
ADD
MUL
...

user output
(empty)

Error:
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

Test 26

Group: 3

Verdict:

input
964804802247123102

correct output
0

user output
(empty)

Error:
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

Test 27

Group: 3

Verdict:

input
996610423667404231

correct output
96
MUL
ADD
MUL
ADD
...

user output
(empty)

Error:
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

Test 28

Group: 3

Verdict:

input
948665008088793691

correct output
86
MUL
ADD
MUL
ADD
...

user output
(empty)

Error:
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

Test 29

Group: 3

Verdict:

input
969397787818953279

correct output
0

user output
(empty)

Error:
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

Test 30

Group: 3

Verdict:

input
918471787211371085

correct output
90
ADD
MUL
ADD
MUL
...

user output
(empty)

Error:
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc