CSES - Datatähti 2017 loppu - Results
Submission details
Task:Ohjelma
Sender:FSMnArmosta
Submission time:2017-01-19 15:16:05 +0200
Language:C++
Status:READY
Result:21
Feedback
groupverdictscore
#1ACCEPTED21
#20
#30
Test results
testverdicttimegroup
#1ACCEPTED0.04 s1details
#2ACCEPTED0.04 s1details
#3ACCEPTED0.05 s1details
#4ACCEPTED0.03 s1details
#5ACCEPTED0.04 s1details
#6ACCEPTED0.04 s1details
#7ACCEPTED0.04 s1details
#8ACCEPTED0.04 s1details
#9ACCEPTED0.04 s1details
#10ACCEPTED0.04 s1details
#11ACCEPTED0.44 s2details
#12--2details
#13ACCEPTED0.47 s2details
#14ACCEPTED0.46 s2details
#15ACCEPTED0.43 s2details
#16ACCEPTED0.50 s2details
#17ACCEPTED0.38 s2details
#18ACCEPTED0.50 s2details
#19ACCEPTED0.47 s2details
#20ACCEPTED0.37 s2details
#21--3details
#22--3details
#23--3details
#24--3details
#25--3details
#26--3details
#27--3details
#28--3details
#29--3details
#30--3details

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:137:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < p.size(); i++){
                               ^

Code

#include <iostream>
#include <vector>
#include <queue>
#include <map>

/*

Siihen en alennu, että ilman Pythonin foria koodaisin [:-1]

*/

#define MP std::make_pair
#define for_x_in_range for(int x = 0; x < 
#define iteratex ;x++)

#define for_y_in_range for(int y = 0; y < 
#define iteratey ;y++)


#define for_z_in_range for(int z = 0; z < 
#define iteratez ;z++)

#define ADD 0
#define MUL 1


/*

tgt = int(input())

memory = {}

def addTo(base, command):
    if base == ["END"]:
        return command + base
    else:
        return base[:-1]+command+base[-1:]

def programsFor(num):
    if not num in memory.keys():
        if num == 1:
            return ["END"]
        else:
            pf2 = []
            pf3 = []
            if num % 2 == 0:
                pf2 = programsFor(num // 2)
            if num - 3 > 0:
                pf3 = programsFor(num - 3)
        
            if pf2 == [] and pf3 == []:
                memory[num] = []
            elif pf2 != [] and pf3 == []:
                memory[num] = addTo(pf2, ["MUL"]) 
            elif pf2 == [] and pf3 != []:
                memory[num] = addTo(pf3, ["ADD"])
            else:
                if len(pf2) > len(pf3):
                    memory[num] = addTo(pf3, ["ADD"])
                else:
                    memory[num] = addTo(pf2, ["MUL"])
    return memory[num]

program = programsFor(tgt)

if program == []:
    print(0)
else:
    print(len(program))
    print("\n".join(program))

*/



std::map<int, std::vector<int> > memory;

std::vector<int> nope;

std::vector<int> programsFor(int num){

    if(memory.find(num) == memory.end()){
        if(num == 1){
            std::vector<int> v;
            return v;
        }else{
            std::vector<int> pf2;
            std::vector<int> pf3;

            bool pf2_possible = false;
            bool pf3_possible = false;
 
            if(num % 2 == 0){
                pf2 = programsFor(num / 2);
                if(pf2.size() == 0 or  pf2.front() != -1){
                  pf2_possible = true;
                  pf2.push_back(MUL);
                }
            }if(num - 3 > 0){
                pf3 = programsFor(num - 3);
                if(pf3.size() == 0 or pf3.front() != -1){
                  pf3_possible = true;
                  pf3.push_back(ADD);
                }
            }



            if(pf2_possible == false and pf3_possible == false){
                memory[num] = nope;
            }else if(pf2_possible == true and pf3_possible == false){
                memory[num] = pf2;
            }else if(pf2_possible == false and pf3_possible == true){
                memory[num] = pf3;
            }else{
                if(pf2.size() > pf3.size()){
                    memory[num] = pf3;
                }else{
                    memory[num] = pf2;
                }
            }
        }
    }
    return memory[num];
}

int main(){

  nope.push_back(-1);

  int tgt;
  std::cin >> tgt;

  std::vector<int> p = programsFor(tgt);
  if(p.size() == 0 or (p.size() > 0 and p.front() != -1)){
    std::cout << p.size()+1 << std::endl;
    for(int i = 0; i < p.size(); i++){
        if(p[i] == ADD){
          std::cout << "ADD" << std::endl;
        }else{
          std::cout << "MUL" << std::endl;
        }
    }
    std::cout << "END" << std::endl;
  }else{
    std::cout << 0 << std::endl;
  }

}

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
58

correct output
8
MUL
ADD
MUL
ADD
...

user output
8
MUL
ADD
MUL
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
MUL
ADD
MUL
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:

input
905674

correct output
30
MUL
ADD
MUL
ADD
...

user output
(empty)

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
MUL
ADD
MUL
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
MUL
ADD
MUL
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)

Test 22

Group: 3

Verdict:

input
955775764385016720

correct output
0

user output
(empty)

Test 23

Group: 3

Verdict:

input
981578916796073406

correct output
0

user output
(empty)

Test 24

Group: 3

Verdict:

input
927875200723222396

correct output
94
MUL
ADD
MUL
MUL
...

user output
(empty)

Test 25

Group: 3

Verdict:

input
990125206148420558

correct output
84
ADD
MUL
ADD
MUL
...

user output
(empty)

Test 26

Group: 3

Verdict:

input
964804802247123102

correct output
0

user output
(empty)

Test 27

Group: 3

Verdict:

input
996610423667404231

correct output
96
MUL
ADD
MUL
ADD
...

user output
(empty)

Test 28

Group: 3

Verdict:

input
948665008088793691

correct output
86
MUL
ADD
MUL
ADD
...

user output
(empty)

Test 29

Group: 3

Verdict:

input
969397787818953279

correct output
0

user output
(empty)

Test 30

Group: 3

Verdict:

input
918471787211371085

correct output
90
ADD
MUL
ADD
MUL
...

user output
(empty)