CSES - Datatähti 2017 alku - Results
Submission details
Task:Järjestys
Sender:kapesu8
Submission time:2016-10-09 21:41:13 +0300
Language:C++
Status:READY
Result:56
Feedback
groupverdictscore
#1ACCEPTED19
#2ACCEPTED37
#30
Test results
testverdicttimegroup
#1ACCEPTED0.05 s1details
#2ACCEPTED0.05 s2details
#3--3details

Code

#include <iostream>
#include <string>
#include <math.h>
#include <vector>
//#include <Windows.h>

#define max(a,b) (a > b ? a : b)

int main()
{
	int proc_counter = 0;
	int count;
	std::cin >> count;
	int* numbers = new int[count+1];
	int* numbers_indices = new int[count + 1]; 
	int* numbers_indices_ro = new int[count + 1];
	//int* numbers_indices_f = new int[count + 1];

	int* klist = new int[count*4];
	int klist_top = 0;
	for(int i = 1;i <= count;i++)
	{
		std::cin >> numbers[i];
		//numbers[i] = count - i + 1;
		numbers_indices[numbers[i]] = i;
		numbers_indices_ro[i] = numbers[i];
		
	}
	//DWORD t = timeGetTime();
	for(int i = 1;i <= count;i++)
	{
		for(int o = 1;o < i;o++)
		{
			if(numbers[o] > numbers[i])
				numbers_indices[numbers[i]] --;
		}
	}
	
	for(int n = count;n >= 1;n--) //<=2n siirtoa ratkaisuun
	{
		/*if(n == count)
		{
			klist[klist_top] = (numbers_indices[n]);
			klist_top++;
		}
		else                    
		{
			int fa_index = numbers_indices[n];
			klist[klist_top] = fa_index;
			klist_top++;

		}*/
		klist[klist_top] = numbers_indices[n];
		klist_top++;
		klist[klist_top] = n;
		klist_top++;
		klist[klist_top] = max(n-1,1);
		klist_top++;
		klist[klist_top] = max(numbers_indices[n]-1,1);
		klist_top++;

		proc_counter++;
		//update indices for i > numbers_indices[n]

		/*for(int i = numbers_indices[n] + 1;i < n+1;i++)
		{
			numbers_indices[numbers_indices_ro[i]]--;
			numbers_indices_ro[i-1] = numbers_indices_ro[i];
		}*/


		/*for(int i = 1;i < n;i++)        
		{
			
			if(numbers_indices[i] <= numbers_indices[n])
			{
				numbers_indices[i] = numbers_indices[n] - numbers_indices[i] + 1;
			}
			numbers_indices[i] = n - numbers_indices[i] + 1;
		}*/

	}
	std::cout << klist_top << '\n';
	//std::cout << "proc_counter = " << proc_counter << ",time: " << timeGetTime() - t << "ms";
	for(int i = 0;i < klist_top;i++)
	{
		std::cout << klist[i] << ' ';
	}
	/*std::cin.clear();
	std::cin.sync();
	std::cin.get();*/
	return 0;
}

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
10
9 3 4 7 6 5 10 2 8 1

correct output
32
10 10 9 10 9 8 7 9 4 2 1 4 5 2...

user output
40
7 10 9 6 1 9 8 1 7 8 7 6 3 7 6...

Test 2

Group: 2

Verdict: ACCEPTED

input
1000
650 716 982 41 133 1000 876 92...

correct output
3984
207 207 206 207 128 127 126 12...

user output
4000
6 1000 999 5 96 999 998 95 130...

Test 3

Group: 3

Verdict:

input
100000
94703 47808 62366 31885 7091 8...

correct output
399956
98676 98676 98675 98676 62994 ...

user output
(empty)