Cod sursa(job #1002197)

Utilizator sorin_olimpicoolSorin Olimpicu sorin_olimpicool Data 26 septembrie 2013 23:55:23
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.6 kb
#include<stdio.h>
#include<string.h>
 
bool nepotrivire[30][30];
int contor_par[30];
int contor_impar[30];
  
int main()
{
    int n,i,j,m,litere;
    char ch1,ch2;
    litere = 26;
    int   sum = 0;
  
    freopen("nrcuv.in","r",stdin);
    freopen("nrcuv.out","w",stdout);
  
    scanf("%d%d\n",&n,&m);
    
    while(m--)
    {
        scanf("%c %c\n",&ch1,&ch2);
        nepotrivire[ch1-'a'][ch2-'a'] = true;
        nepotrivire[ch2-'a'][ch1-'a'] = true;
    }
    
     
     for (int i = 0; i < litere; i++) {
            contor_impar[i] = 1;
        }
       
    
        for (int k = 1; k < n; k++) {
            if (k % 2 == 0) {
                if (k > 0) {                  
                    // memcpy(contor_par,contor_impar,sizeof(contor_par));
                }
                for (int i = 0; i < litere; i++) {                   
                    contor_impar[i] = 0;
                }
                for (int i = 0; i < litere; i++) {
                    for (int j = 0; j < litere; j++) {
                        if (!nepotrivire[i][j]) {                  
                            
                       
                            contor_impar[j] = contor_impar[j] + contor_par[i];                            
                            contor_impar[j] = contor_impar[j] % 104659;                            
                        }
                    }
                }
           
                
            } else {
                if (k > 1) {
                    // memcpy(contor_impar,contor_par,sizeof(contor_impar));
                }
                for (int i = 0; i < litere; i++) {                  
                    contor_par[i] = 0;
                }
                for (int i = 0; i < litere; i++) {
                    for (int j = 0; j < litere; j++) {
                        if (!nepotrivire[i][j]) {                          
                            contor_par[j] = contor_par[j] + contor_impar[i];                           
                            contor_par[j] = contor_par[j] % 104659;
                        }
                    }
                }    
                
            }
        }
 
        if (n % 2 != 0) {
            for (int i = 0; i < litere; i++) {
                sum = (sum + contor_impar[i]);
                sum = sum % 104659;
            }
        } else {
            for (int i = 0; i < litere; i++) {
                sum = (sum + contor_par[i]) % 104659;
                sum = sum % 104659;
            }
        }
        
 
    printf("%d",sum);
    return 0;
}