Cod sursa(job #2355609)

Utilizator leeviiTempfli Levente2 leevii Data 26 februarie 2019 10:39:48
Problema Radix Sort Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 19.96 kb
#include <iostream>
#include <fstream>
#include <stdint.h>
#include <string>
#include <algorithm>
#include <string.h>

using namespace std;

ifstream fin("radixsort.in");
ofstream fout("radixsort.out");

long long x[10000001];
long long dgs[256], idx[256];
long long x2[10000001];
int n, a, b, c;

uint8_t get_byte(int x, int b) {
	return ((x >> (b * 8)) & 255);
}

void counting(long long a[],long long b[], int j) {
	memset(dgs, 0, 256);
	for (int i = 0; i < n; i++) {
		dgs[get_byte(a[i], j)]++;
	}
	idx[0] = 0;
	for (int i = 1; i < 256; i++)
		idx[i] = idx[i - 1] + dgs[i - 1];

	for (int i = 0; i < n; i++)
		b[idx[get_byte(a[i],j)]++] = a[i];
}

void radix() {
	for (uint8_t i = 0; i < 4; i++) {
		if (i % 2 == 0) counting(x, x2, i);
		else counting(x2, x, i);
	}
}

void generate() {
	x[0] = b % c;
	for (int i = 1; i < n; i++)
		x[i] = (a * x[i - 1] + b) % c;
}

void read() {
	fin >> n >> a >> b >> c;
}

void write() {
	for (int i = 0; i < n; i+=10) {
		fout << x[i] << " ";
	}
}

int main() {
	read();
	generate();
	radix();
	//sort(x, x + n);
	write();
}

/*


												 ::
												/dd/
											   odhhdo
											 `sdy..yds`
									.yhhhhhhhhddhhhhddhhhhhhhhy.
									 .ydh/:+ddo::::::odd+:/hdy.
									  `sdy/dd+        +dd/yds`
										oddd:          :dddo
										oddd:          :dddo
									  `sdy/dd+        +dd/yds`
									 .ydh/:+ddo::::::odd+:/hdy.
									.yhhhhhhhhddhhhhddhhhhhhhhy.
											 `sdy..yds`
											   odhhdo
												/dd/
												 ::


			  :+`                                                   `
	 ````````.os-`                  .-------:----------...........-:+::...`..`````.-.....
	.sooooo++sssso++++///////++++++sddysyyyyyyyyyyyyyyyyyysssssssssyyhhhhhhmmhssssyhssssss/`
	`::::::::///++osss+++++oooossssyddmddmmmmmddddddddmNNmmmmmmmmmNNNNNNNNNNNmdddddmdddddmhy:
				   .//              `.---:::/osyyysyhhhNNNNNNNMMMMMMMMMMMMMMMMMMMMNNdMMMMmhdd-
											 /ssssyddhhddyydddmNNmmmmmmmmmmmmmmmmmmmmmmmNNdddo
											 +yyyyy+///+mddmmmmNNNNmmmmmmmmNNNNNNNNNNNNNNMNmd/
											`shhhhy:/:..``:ss/-:/os-``....-sh:-om/smNNmdmNh+-
											 .dddd/                        `o  .s .hNdddmM-
											 -dddd/                         `-----::ymdddNm:
											 -dmmm/                                  +mmmmmNs`
											 :mmmm/                                   -hmddmNd.
											 :mmmm:                                    `smmdmNN-
											 :mmmm:                                      hNmdho`
											 /mmmm:                                      `-.`
											 /mmmm-
											 +Nmmm-
											 +NNNm-
											 oNNNN.
											 oNNNN.
											 /ssss`


































								   ``
								  .yh.
								  :hh-
								  shh-
								 `hhd-
								 :dhd-
								`shhd-
								-hhhd-
								/hhhh.
							   `shhhh.
							   .hhhhh.
							   /dhhhh`
							   shhhhh`                                                                                                                                                                                     `.
							  .hhhhhy`                                                                                                                                                                                     :s
							  :dhhhdy                                                                                                                                                                                      +o
							  +dhhhds                                                                                                                                                                                     `y/
							 `yhhhhds                                                                                                                                                                                     .h:
							 -hhhhhdo                                                                                                                                                                                     /d.                                                                                                                         `.
							 /dhhhhm+                                                                                                                                                                                     sh.                                                                                                                        `:-`.......```
							 sdhhhdm/                                                                                                                                                                                    `hy`                                                                                                                       `-:::/::::::::::-.`
							`hhhhddm/                         `..................`````                                                                                                                                   :hs`                                                                                                                      .-:::///::::::::::/:-`
							-dhhdddm:                        `...............................```                                                                  .-.````.``...````````````                             `oh+                                                                                                                     `.-::::::///:::::::::::/-`
							/dhhdddm-                          `.............................---...``                                                           .--.-:--.://:/::/+++//:::::-:-.......``                 .sh/                                                                                                                    .-:::/:::::/+/:::::::::::/:`
							ohhhddmm.                           `........-.......................---...`` ``````                                              .-```````/o/`      :h-.-+//sossysosoo++//////::-.```````` -yd:                                                                                                                  `--:::::///::::++////::::/::/:`
						   `yhhhhdmy`              `````````````````.........`````````````...............`........````````                                  ./:.`````.+/`        -y.`.++ss+hddd:oyhhhy:----::sh-`..---.-+os+-```                                                                                                             .--:::::://::/:::+o////:::::::/:`
						   `yhhhddm:           ```.----...........-.-----.---------..--.........-.............---------........-........../+////::::::::::::/+oo+/:-/+.          -s.``//:osydhdooyhhhdy....-.oh/:--::://::-yhysoo++//:--..```                                                                                              `--::::::///////::::oo://///:::::/-
							sdhddm/       ``...------:------------------------------------------::::::-------------------------------------/yssssssssssssssssssyss+o:            :h.`/::/+hNmhs/oysooyo``````sho++++oo++//shyyhhhhyyyyyyyyyyy/----..```                                                                                   .--:::://///////////:+o:////::::::::`
							+ddmm/     ``.----.......--------------------------------------------::::-::------------------------------------+hyyyyyyyyyyhyhhyyyhhyoy+.`          :h./:-+yyysss++syyooo+-----:sh///++//::+hhhhhhhhhhhhhhhhhhhh+///////////:::-...```                                        `-://:--.``                  `---:::://////////////:s//////:::::::/.
							+mddd-.-...:+-....`````...---------------------------------------------------------------------------------------yhhhhhhhhhhhhhhyohhhh:./sy:`        /h-/.:oso:--:+osyyoooo-:+oo/sh/::://++shhhhyyyyyyyyhhhhhhhhh////////////////s/:so++/:---..```                              .://++++//:--..```         .--:::////////////////:/s//////::::::::-
						  `..:-:///:..../+```````..------------------------------------------------------------------------------------------shhhhhhhhhhhhhhhsyhhho:.++oso:`     /y/-.//--:/ssosshhssoo/++++:yh/////+oyhhhhhhyyhyyyyyyyyyyhho////////////////sy`sNNmmmmd-+y////:::-..```                        ``.-:/++o/:::--....```--:::://///////////////:oo:////::::::::::`
						 `-........`````.s.`````..------------------------------------------------------------------------::-----------------+hhhhhhhhhhhhhhhyhhhhyssoooo+oy+-`  syo-:---:o+oyhosddhsooossss+yhoooooyhyoosssyyyyyyhhhhhhhhhy//////////////////d--NmmmmmNs`hs/////+/++/////::--..`                     ```..-::::---/s--/o/////////////////://:s//////::::::::::`
					  ``...``````````````s:``...---------------------------------------------------------------------------------------------/ssssyyyhhhhhhhhhhhhhyyyssssso+oss/-sysso///ssosyhyymmdsooyyyyyoshososhhs:::::::::::::://+++os/:////////////////:d+`mmmmmmmd.+h///////++++++++++++++///:--.``                   ``+s+oho-:o/-:////////////////oo/s/////:::::::::::`
				   `..`````````````......s/..-------------------------------------------------------------------------------------------------:::----::::::///+++oyyyyhhhyyyyyyyssyhhyhhhyyyyyyyyhhyyyyssyyyyyyosyhs/:::-...---:::::::-----::::::::::::::::::-ho hmmmmmdm:.d/////+/++///+++++++++++++++++++/+so/:-.`           :dyys::/hooo++//////////++/+oooo////::::::::::::`
				  `/-````.............--.s+.--------------------------------------------------------------------------------------------------:/:::::::-:o+-:.-/+:-::::::///++oooo/++ooosssyyyyyyyhhhhhhhhhhhhyyhy+::::.`.`.``.:::::.`.`.....-::::::/o++///::-ss smmmmddm/`d/:///////////////++++++++/++++++/+yhhhhhyso+/:-.../shyh/:::+/+ssyysssoo++////////+ooooo++////:::::/.
				  -/-..------------------s+--------------------------------------------------------------------------------------------------:/://:::::::/.+o..-+:::::::::::::::::::::::::::::::::::://++++oossyo::::-`.`.````.:::-`````...````-::::://++ooossyo`ommmmmdmo`ho:/:::::::::::::::::://////////////yhhhhhhhhhhhhhhhhhdo:://///+osssyyyyyyyyyysso++++ooosssysssoo+/:.```
				 `.----------------------y/---------------------------------------------------------------------------------------------------////:::::::-`/soo.-:::::::::::::::::::::::::::::--:/++++/:--:::::::::::.`...````.:::.```.-:::-``.`-::::oo++//:::--.ommmmmdmo`/oooossssyo::::::::::::::::::::::::://++++ooossssyyyyyo////////++oosssssyyyyyyyyssoo++++++///++oosssoo++/::--.`` `
				  .-:::::::::::::::::::-:y::::::::::-----------------------------------------------------------------::::::::----------------:::::::::::/o-.:-+.+::::::::::::::::::::::::::::-/oysssshsoo/-::::::::::.``-.````.::-....-:::::-```.::::Nmmmmmmmmmdddmmmmmmmho+//:::-----::::::::::::::::::::::::::::::::::::::://////////+++++oooooooossso++/:/++ooossso++//::::::://+oooooooos+++/:-.``
				  `-::::::+:-.:/o+++/::-/y-::::::::::::-::-----------------------------------------------------------:/+++/:------:::::------:::::::::::/oo:oh//o:::::::::::::::::::::::::::.+soyyo+/dhssso--::::::::..-:-````.:::::::::::::-```.::::Nmmmmmmmmmmmmmmmmmmmmmmdmmddddddy:::::::::::::::::::::::::::::::::::::::/+oo++//++++++++++++oooooo+/:/ohsosssssoo+++//:::-    ```...--:/-:://+++++/:`
				   `.::::++:ohhdms/dy/::so::::::::::::::::::--------------------------------------------------------::///+/:------:::::------::/:/:::::::+osydhs/::::::::::::::::::::::::::./ssso/oo:+hyssso.::::::::.:::-````.::::::::::::-.`.`.::::mmmmmmmmmmmmmmmmmmmmmmddmddddddmh:::::::::::::::::::::::::::::::::::::::///////////////++++oooo+/::/+ohyossssssoo+++///:/.                `````````.
					 `//::++ddyhmd+ho:::y/:::::::::::::::::::::::::-::----------------------------------------------:::::::-------:::::------://////:::::///++//:::::::::::::::::::::::::::.osssssoymdssssss:-:::::::::::.````.:::::::::....```.:::::Nmmmmmmmmmmmmmmmmmmmmmmdmddddddmh-::::::::::::::::::::::::::::::::::::::////////////////+++o+/::/+oooodsooossssoo+++/////`
					 -mh:.--/oyydhhy:::+y:::::::::::::::::::::::::::::::::-::::::::---::------------------------::-:::://///::::::::::::::---//://////////////::::::::::::::::::::::::::::/.osssssshmmsyssss:-/::::::::::.````-:::::::::..`.`.`-:::::hhhhhddddddmmmmmmmddmmmddddddddmh:::::::::::::::::::::::::::::::::::::://:////////o////+++/:::/++++++shoooooooooo++++///-
					.hh-  `.--ohyhoo:::y+::::::::::::::::/:::::----:::::::-:-----:--::::::::::::::::::::::::---::-----::::::/://:::::::-----:/:/://///////////////:://://:::::::::::::///:/-/ssssssddmsyysso-::::::::::::.````-:::::::::::-..```-::::---------:::smdddddmhyyyhhhddddmh::::::::::::::::::::::::::::::::::::://:::::://:/+//++//::://///+/+/yy+oooooooooo+++++-
				   `yh.      `.shh/-::s+::::::::::::::::///::::::::::::::-+sooo+++/////::::::-----------:::::::::::::::::::---::::::-::-----:://:://///////////////////////////////////////:-+ssydysssssyss:-/:::::::::::..`.`-:::::::::::::-```.:::/ssssssssss+`omdddddmo`---------:::::::::::::::::::::::::::::::::::::::+o:::::::::/+o+/::::///////////h++++oooooo++//:-.
				  `oh-         -hyy--++::::::::::::::::://::::::::::::::::dNNNNNNNNNmmmmmddddhhhyyysssooo+++////:::::----:::::::::::::::::--:////////////////////////////////////////////////-/osssssssss+:://:::::::::::...`.:::-....-:::::-```.::::::::::::-ho ymdddddm+`hyssssssss+::::::::::::::::::::::::::::::::::::::::::::::::/+/:::::::::://////os////::--.```
				 .oh-           /hh:`..-:::::::::::::::::::::::::::::::::/yyyhhdddmmdmmmmNNNmmNNNNNNNNNNNNmmmmmmmddddhhs/-::::::::::::::::::/+++++////////////////////////////////////////////:::++ooo+/::://////////::::...`.::::.```.::::-.```.::::::::::::-d/`mmmddddm:.d::::::::/:::::::::::::::::::::::::::::::::::::::::::::::::/::::::-..` `-:--...````
				.oh-            `sh+    `--::::::::::::::::::::::::::::::::::::::///////+++oooossyyhhhhdddddmmmmmmmmNNNo/:::::::::::::::::::++++++++++++++++++///////////////////////////////////:::::::////////////////-...../:::-`.``.....```.:::::::::::::/d.:Nmmdddmh`+y:::::::::::::::::::::::::::::::::::::::::::::::::::::::/:::---.``
			   .oy-              -ds`     `.--::::::::-------------:-:::--::::::-::::::::::::::::::::::::::://////++oso/::::::::::::::///+++o++++++++++++++++++++++oooo+++//////////////////////////////////////////////-...`-/::/:-.`.`...``.-::::::::::::::ss`smddmddN+.h+:::::::::::::::::::::::::::::::::::::::::::::::---.....+/.`
			  -ss`                od-        ``.--:::-------------------------------------::-:::::::::::::::::::---::::::::::::///++++++++++++++++/////////////////////++++ooo++++++////////////////////////////////////:::::/:///:/:-.....--:/::::::::::::::h-:ddddddmh.oy-::::::::::::::::::::::::::::::::::::----...```        `+/.````
			 -s+`                 -ho            ``...-------------------------------------------------------:----:::::::://+++++////++++++++++++++++++/////::::::::::////////////++++o++++++//////////////////////////////////://:::/::::::::::::::::::::::so.yddddddd-/y::::::::::::::::::::::::::::---...```                   .o/:ohdho-
			.o-                    +h-                ````...-------------------------------------------------------::-:/++++++++///////+//+///////////////////::::::::::::::::::///////////+++++oo+++++////////////////////////::::::::::::::::::::::::::::/:://////+/-+/:::::::::::::::---....````                              .+////sshm/
			``                     .h+                       ```````....----------------------------------------------/soooo+//:::::::::----::::::::::::::::::::::::::::::::::::::::::::////////////+++ooooo+++/////////////::::::::::::::::::::::::::::::::::::::::::::::----...`````                                            .hdy+:::-dy`
									/h.                                 `-::----------------------------------------/+osso+:::::---------------::::::::::::::::::::::::::::::::::::::::::::::::::////////////++++ooooo++/////:::::::::::::::::::::::::::------....``````                                                          `hmmd::::do
									`y/                                    .-------------------------------------:////+oo+//:::-------------------:::::::::::::::::::::::::::::::::::::::::::::::::::://///////////::///s//::::::::::::::::::---...````                                                                            -yddhsyds`
									 /y                                      `...-------------------------.``````.....---:/+//::::----------------------::::::::::::::::::::::::///+++++oo++++++/////:::::::::::://///::o/::::::::--..````                                                                                           -/++:`
									 `y:                                             `````````........```                `-/++++//::::::::--------------------------------:/+oossssssssssooooooooooooo++++//++/:::::::::/:---.``
									  :s`                                                                                  `/ooo++++//:::::::::------------------------:/ossssoooooooossossoosssoooooooooooooooooo+//::-`
									  `o.                                                                                    `.+yssossoo+//:::::::::::---------------:osssooooooooooooooooosssssssso+//:/ossooooo+ooo+//-``
									   `                                                                                  `.:+ydmNNMNhyhmmmmdhso/:---:::::-------.--/soooooooooooooooooooooooooo++/////-``.-:/+osso+//:/+++/:-.`
																													   :oymNNNNNNNNNmys+hNNNNNNNNNmhhhhhddddhhhhyyyyyyyyhs+oooooooooooooooooooo++/+oyyyyyhhhhhyysssso++//+////:::-.``
																													-sdmmmmNNNNNNNNNNhyymNNNNNNNNNNmmmmdddhsyyyssosssyyhdosoossooooooooooooooooooooooooso/:------:::::-..-/+ooo+++//:--...`
																												  .ymmmmmmmmmmmmmmmmmNNNmmmmmmmmmNNNNNNNNNNNmmdhyyso+/:::-/:::/++ooooooooooooooooooooooooooooooooooooooo++//-.--:/++//::-----..``
																												  `odddddmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmddhyo+/::--:///++ooooooooooooooooooooooooooooooo+/:-------------:::-------...``
																													-ohhhhhhddddddddddddddddddddddddddddmdmmmmmmmmmmdddmdddmmmmmdhyo+/:--::://+oooooooooooooooooooooo/:----------------------:::::::-----..``
																													  ./oyyyhhhhhhhhhhhhhhhdddddddddddddddddddddddddhhddhhhddddddmmNNNmmhyo/-:::::////+ooooooooooso/---------------------------:::::::::::::----....```
																														`./+syyyyyhhhhhhhhhhhhhhhhhhhhhhhhhdddddddhhhddddddmmmNNNNNNNNNNNmmo` ```..---:::://++ooo+-------------------------------------::::::::::----------..```
																														   ``.:/+osssyyyyyyyyyyyyyyyyhhhhhhhhhhhhhhddmmmmNNNNNNNNNNNNNNNmmm+          ```..-::://:---------------------------------------------------------------..```
																																 ```.....---:::///++oooossssssyyyosmNNNNNNNNNNNmmmmmmmmmmmdh.                ```.--::::::---------::/+++oooooooooo++++++++++///////::::::--------------..````
																																					  ````````..```:ymmmmmmmmmNNNmmmmmmmNmdm/                       ```.---::::-:+oooooosssssssooooooooooooooo++++++++++++++///::::-----------..```
																																									`...---::///+++oossyyyyhy                              ``...-:/++oooooooooosssssssoooooooooooo++++++++++++++++++/////:::--------...``
																																														 ````                                     ```.-::++oooooooooosssssssoooooooooooo++++++++///////++++//////::::-:---...```
																																																										 ```.-:/++oooo+oooossssssssoooooooooooooooooooooooooooo++++++++////:::::--..``
																																																												``..-://+++++++oooossssssssssyyyyyyyyssyyyyyyyyyyyyyyyyssssssooooo++++/:-..``
																																																													   ``..-:////////+ossyyyyyyyyyyyyyyyhyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyssoo/`
																																																															  ``..-::/+oosssssssyossyhssyssosssooooooooooooo+++++/////+/::::/-
																																																																	 `..-::////so/+soo////::::::::::----....`````
																																																																			   `










































*/