Cod sursa(job #2364337)

Utilizator stratonedanielDaniel Stratone stratonedaniel Data 3 martie 2019 23:53:44
Problema Elementul majoritar Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.4 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;
			
				
				if(i>=length_of_array)
				{
					numar=array[length_of_array-1];
					special_case=true;
				}
					
			}
			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;
}