Cod sursa(job #1607409)

Utilizator test72101S.A.C. test72101 Data 21 februarie 2016 03:23:09
Problema Pascal Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.81 kb
#include<fstream>
using namespace std;
int a[3][5000010];

int divizor(int n,int div,int indice,int mod){
	int i=0,primul=0,rez=0,sol=0,j=0;
	if (mod==1){
	for (i=1;i<((n+1)/2);i++){
		rez=0;
		primul=(i+1)%div;
		if (primul!=0) primul=div-primul;
		for(j=i+1+primul;j<=n;j=j+div) rez+=a[indice][j];
		for(j=div;j<=n-i;j=j+div) rez-=a[indice][j];
		if (rez>0) sol++;
	}
	sol=sol*2;
	if (n%2==0) {
		rez=0;
		primul=(n/2+1)%div;
		if (primul!=0) primul=div-primul;
		for(j=n/2+1+primul;j<=n;j=j+div) rez+=a[indice][j];
		for(j=div;j<=n/2;j=j+div) rez-=a[indice][j];
		if (rez>0) sol++;
		}
	}
	 if (mod==2){
		div=div/2;
		for (i=1;i<((n+1)/2);i++){
		rez=0;
		primul=(i+1)%div;
		if (primul!=0) primul=div-primul;
		for(j=i+1+primul;j<=n;j=j+div) rez+=a[indice][j];
		for(j=div;j<=n-i;j=j+div) rez-=a[indice][j];
		if (rez>1) sol++;
	}
	sol=sol*2;
	if (n%2==0) {
		rez=0;
		primul=(n/2+1)%div;
		if (primul!=0) primul=div-primul;
		for(j=n/2+1+primul;j<=n;j=j+div) rez+=a[indice][j];
		for(j=div;j<=n/2;j=j+div) rez-=a[indice][j];
		if (rez>1) sol++;
		}
	}

return sol;
}

int main(){
    int linie,numar,rez,i;

    FILE *f=fopen("pascal.in","r");
    FILE *g=fopen("pascal.out","w");
    fscanf(f,"%d %d",&linie,&numar);
    
 
    for (i=2;i<=linie;i++){
    	if (i%2==0) a[0][i]=1+a[0][i/2];
    	if (i%3==0) a[1][i]=1+a[1][i/3];
    	if (i%5==0) a[2][i]=1+a[2][i/5];
    }
    
    switch(numar){
    	case 2: 
    		rez=divizor(linie,numar,0,1);
        	break;
        case 3: 
    		rez=divizor(linie,numar,1,1);
        	break;
        case 4: 
    		rez=divizor(linie,numar,0,2);
        	break;
        case 5: 
    		rez=divizor(linie,numar,2,1);
        	break;
        case 6: 
    		rez=divizor(linie,numar,2,3);
    		break;
    }
    
    return rez;
}