CSES - Datatähti 2021 alku - Results
Submission details
Task:2021-luvut
Sender:Eljas
Submission time:2020-10-09 10:44:47 +0300
Language:C++ (C++17)
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
#40
Test results
testverdicttimegroup
#1ACCEPTED0.01 s1, 2, 3, 4details
#20.01 s1, 2, 3, 4details
#30.01 s1, 2, 3, 4details
#40.01 s1, 2, 3, 4details
#50.01 s1, 2, 3, 4details
#60.01 s1, 2, 3, 4details
#70.01 s1, 2, 3, 4details
#80.01 s1, 2, 3, 4details
#90.01 s1, 2, 3, 4details
#100.01 s1, 2, 3, 4details
#110.04 s2, 3, 4details
#120.01 s2, 3, 4details
#130.03 s2, 3, 4details
#140.01 s2, 3, 4details
#150.02 s2, 3, 4details
#160.04 s2, 3, 4details
#170.02 s2, 3, 4details
#180.04 s2, 3, 4details
#190.04 s2, 3, 4details
#200.01 s2, 3, 4details
#21--3, 4details
#22--3, 4details
#23--3, 4details
#24--3, 4details
#25--3, 4details
#26--3, 4details
#27--3, 4details
#28--3, 4details
#29--3, 4details
#30--3, 4details
#31--4details
#32--4details
#33--4details
#34--4details
#35--4details
#36--4details
#37--4details
#38--4details
#39--4details
#40--4details

Compiler report

input/code.cpp: In function 'void fill(std::__cxx11::string&, std::__cxx11::string&, int&)':
input/code.cpp:178:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int j = oneLoc + 1; j < s.size(); j++)
                           ~~^~~~~~~~~~

Code

#include <string>
#include <iostream>
#include <algorithm>
#include <cmath>



int getState(std::string& s) {

	int state = 0;
	for (char c : s)
	{
		if (state == 0 && c == '2')
		{
			state = 1;
		}
		else if (state == 1 && c == '0')
		{
			state = 2;
		}
		else if (state == 2 && c == '2')
		{
			state = 3;
		}
		else if (state == 3 && c == '1')
		{
			state = 4;
		}
	}
	return state;
}


void addThousand(std::string& s, std::string fh, int state) {
	int size = s.size();

	std::string sh = s.substr(size - 3, 4);


	if (fh == "")
	{
		s = "1" + sh;
	}
	else {
		long long l = std::stoll(fh);
		l++;

		std::string ls = std::to_string(l);

		s = ls + sh;
		while (std::count(s.begin(), s.end(), '2') < 2)
		{
			l++;
			ls = std::to_string(l);
			s = ls + sh;
		}


		if (s[0] == '2' && fh[0] != '2' && std::count(s.begin(), s.end(), '2') > 2)
		{
			int it = 1;
			while (s[it] != '2') {
				it++;
			}
			s[it] = '0';
		}
	}
}

void addHundred(std::string& s, std::string& fh, int state) {
	int size = s.size();

	if (s[size - 3] == '9') {
		s[size - 3] = '0';
		addThousand(s, fh, state);
		return;
	}
	else if (state >= 2)
	{
		s[size - 3]++;
	}
	else
	{
		s[size - 3] = '0';
		addThousand(s, fh, state);
		return;

	}
}

void addTen(std::string& s, std::string& fh, int state) {

	int size = s.size();

	if (state >= 3)
	{
		if (s[size - 2] == '9')
		{
			s[size - 2] = '0';
			addHundred(s, fh, state);
			return;
		}
		s[size - 2]++;
		return;
	}


	if (s[size - 2] == '2')
	{
		if (s[size - 3] == '0')
		{
			addHundred(s, fh, state);
			return;
		}
		else if (s[size - 3] == '1')
		{
			s[size - 2] = '0';
			addHundred(s, fh, state);
			return;
		}
		else if (s[size - 3] == '2')
		{
			s[size - 2]++;
		}
		else
		{
			addHundred(s, fh, state);
		}
	}
	else if (s[size - 2] == '9')
	{
		s[size - 2] = '2';
		s[size - 3] = '3';
	}
	else {
		s[size - 2]++;
	}
}

void addOne(std::string& s, std::string& fh, int state) {
	int size = s.size();
	if (s[size - 1] == '1')
	{
		if (s[size - 2] == '0')
		{
			s[size - 1] = '0';
			s[size - 2] = '1';
			return;
		}
		else if (s[size - 2] == '1')
		{
			s[size - 1] = '2';
			return;
		}
		else
		{
			addTen(s, fh, state);
			return;
		}
	}
	else if (s[size - 1] == '9')
	{
		s[size - 1] = '1';
		addTen(s, fh, state);
	}
	else {
		s[size - 1]++;
	}
}



void fill(std::string& s, std::string& fh, int& i) {
	int oneLoc = fh.rfind('1');

	int length = s.size() - oneLoc;

	for (int j = oneLoc + 1; j < s.size(); j++)
	{
		s[j] = '0';
	}

	s[oneLoc] = '2';
	i += std::pow(10, length);

}

int main() {
	int n;
	std::cin >> n;


	std::string s = "2021";

	for (int i = 0; i < n - 1; )
	{
		int size = s.size();
		std::string fh = s.substr(0, size - 3);

		int state = getState(fh);
		if (state == 4)
		{
			fill(s, fh, i);
		}
		else
		{
			addOne(s, fh, state);
			i++;
		}
	}
	std::cout << s;
}

Test details

Test 1

Group: 1, 2, 3, 4

Verdict: ACCEPTED

input
10

correct output
20214

user output
20214

Test 2

Group: 1, 2, 3, 4

Verdict:

input
359

correct output
202661

user output
220219

Test 3

Group: 1, 2, 3, 4

Verdict:

input
392

correct output
202819

user output
230215

Test 4

Group: 1, 2, 3, 4

Verdict:

input
715

correct output
230721

user output
420621

Test 5

Group: 1, 2, 3, 4

Verdict:

input
278

correct output
202219

user output
202716

Test 6

Group: 1, 2, 3, 4

Verdict:

input
296

correct output
202318

user output
202815

Test 7

Group: 1, 2, 3, 4

Verdict:

input
427

correct output
203214

user output
240213

Test 8

Group: 1, 2, 3, 4

Verdict:

input
565

correct output
208212

user output
276021

Test 9

Group: 1, 2, 3, 4

Verdict:

input
289

correct output
202311

user output
202791

Test 10

Group: 1, 2, 3, 4

Verdict:

input
342

correct output
202581

user output
215021

Test 11

Group: 2, 3, 4

Verdict:

input
964486

correct output
182502018

user output
120242000

Test 12

Group: 2, 3, 4

Verdict:

input
110979

correct output
20296916

user output
20220000

Test 13

Group: 2, 3, 4

Verdict:

input
759149

correct output
126108721

user output
102202711

Test 14

Group: 2, 3, 4

Verdict:

input
234934

correct output
25023210

user output
20252000

Test 15

Group: 2, 3, 4

Verdict:

input
610310

correct output
120288133

user output
52022000

Test 16

Group: 2, 3, 4

Verdict:

input
956690

correct output
182027419

user output
120232000

Test 17

Group: 2, 3, 4

Verdict:

input
608459

correct output
120281827

user output
51620210

Test 18

Group: 2, 3, 4

Verdict:

input
944777

correct output
175260251

user output
120222000

Test 19

Group: 2, 3, 4

Verdict:

input
880780

correct output
152270421

user output
120220000

Test 20

Group: 2, 3, 4

Verdict:

input
418357

correct output
68202361

user output
22503012

Test 21

Group: 3, 4

Verdict:

input
713294506861

correct output
20099206371786

user output
(empty)

Test 22

Group: 3, 4

Verdict:

input
191431126351

correct output
4193020274761

user output
(empty)

Test 23

Group: 3, 4

Verdict:

input
778422318223

correct output
20247733120134

user output
(empty)

Test 24

Group: 3, 4

Verdict:

input
931090767075

correct output
20691282041612

user output
(empty)

Test 25

Group: 3, 4

Verdict:

input
198806129726

correct output
4275365802196

user output
(empty)

Test 26

Group: 3, 4

Verdict:

input
724343399444

correct output
20128443204610

user output
(empty)

Test 27

Group: 3, 4

Verdict:

input
105064053560

correct output
2350677231115

user output
(empty)

Test 28

Group: 3, 4

Verdict:

input
236866700902

correct output
5872395029521

user output
(empty)

Test 29

Group: 3, 4

Verdict:

input
696349488695

correct output
20034225603103

user output
(empty)

Test 30

Group: 3, 4

Verdict:

input
30929267826

correct output
1205256095901

user output
(empty)

Test 31

Group: 4

Verdict:

input
576379198814226780

correct output
4185251600926331891

user output
(empty)

Test 32

Group: 4

Verdict:

input
291698664446913099

correct output
2280132983584730156

user output
(empty)

Test 33

Group: 4

Verdict:

input
693146378550043345

correct output
5270258230724009910

user output
(empty)

Test 34

Group: 4

Verdict:

input
685982323362439932

correct output
5236052744416920782

user output
(empty)

Test 35

Group: 4

Verdict:

input
838865925103308874

correct output
6800200426815679149

user output
(empty)

Test 36

Group: 4

Verdict:

input
766426223219980635

correct output
6112960212822572807

user output
(empty)

Test 37

Group: 4

Verdict:

input
652970397451919317

correct output
4923188580186259818

user output
(empty)

Test 38

Group: 4

Verdict:

input
188458586650539464

correct output
1903508375720755921

user output
(empty)

Test 39

Group: 4

Verdict:

input
157646989818721527

correct output
1525038392797601315

user output
(empty)

Test 40

Group: 4

Verdict:

input
898606361978236778

correct output
7326676702587314407

user output
(empty)