Cod sursa(job #2364236)

Utilizator stratonedanielDaniel Stratone stratonedaniel Data 3 martie 2019 22:51:00
Problema Elementul majoritar Scor 90
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main()
{
	FILE *read=fopen("elmaj.in","r");
	FILE *write=fopen("elmaj.out","w");

	int length_of_array;
	int *array;	

	fscanf(read,"%d",&length_of_array);
	array=(int*)calloc(length_of_array,sizeof(int));

	int numar=-1;
	int contor=0;

	for(int i=0;i<length_of_array;i++)
		fscanf(read,"%d",&array[i]);
	
	int i=1;
	bool special_case=false;
	
	while(i<length_of_array)
	{
		if(i>0)
		{
			if(array[i]==array[i-1] && contor==0)
			{

				contor=2;
				numar=array[i];
				i++;
			}
			else if(array[i]==numar && contor!=0)
			{
			
				i++;
				contor++;
			}
			else if(contor==0 && array[i-1]!=array[i])
			{
				i=i+2;
				
			}
			else if(contor!=0 && numar!=array[i])
			{
				contor--;
	
				if(contor!=0)
					i++;
				else
				{
					i=i+2;
					
					if(i==length_of_array && numar == array[length_of_array-1])
					{
						special_case=true;
					}

				}
			}

		}
	}

	int aparitii=0;

	if(contor>0)
	{
		for(int i=0;i<length_of_array;i++)
			if(array[i]==numar)
				aparitii++;
		
		fprintf(write,"%d %d\n",numar,aparitii);
	}
	else if(special_case==true)
	{
		for(int i=0;i<length_of_array;i++)
			if(array[i]==numar)
				aparitii++;

		fprintf(write,"%d %d\n",numar,aparitii);
	}

	free(array);

	
	fclose(read);
	fclose(write);

	return 0;
}