Cod sursa(job #3170604)

Utilizator Cazacu2006RazvanRazvan Cazacu Cazacu2006Razvan Data 17 noiembrie 2023 20:26:35
Problema Iv Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <fstream>
#define mod 3210121
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
char x[501],y[501];
int nr[27],d[501][501][3],nr1[501][27],nr2[501][27],sol,n;
int main()
{
   fin>>x>>y;
   for(int i=0;x[i]!=0;i++)
   {
       for(int j=i;x[j]!=0;j++)
        nr1[j][x[i]-'a'+1]++;
       nr[x[i]-'a'+1]++;
       n++;
   }
    for(int i=0;y[i]!=0;i++)
   {
       for(int j=i;y[j]!=0;j++)
        nr2[j][y[i]-'a'+1]++;
       nr[y[i]-'a'+1]++;
       n++;
   }
    int nri=0;
   for(int p=1;p<=26;p++)
   {
       if(nr[p]%2==1)
       nri++;
   }
   if(nri>1)
   {
       fout<<0;
       return 0;
   }
   d[0][1][2]=1;
   d[1][0][1]=1;

   for(int i=0;i==0 || x[i-1]!=0;i++)
   {
       for(int j=0;j==0 || y[j-1]!=0 ;j++)
       {
           if(i+j==n/2)
           {

               sol=(sol+d[i][j][1]+d[i][j][2])%mod;
           }
           if(i+j>=n/2)
            break;

            int cu1=x[i];
            int ok=1;

            for(int p=1;p<=26;p++)
            {

                if((nr[p]-nr1[i][p]-nr2[j-1][p])*2>nr[p] && nr[p]-nr1[i][p]-nr2[j-1][p]!=nr[p])
                {
                    ok=0;
                    break;
                }
            }
           if(ok==1)
           d[i+1][j][1]=(d[i+1][j][1]+d[i][j][1]+d[i][j][2])%mod;
           int cu2=y[j];
            ok=1;
            for(int p=1;p<=26;p++)
            {
                if((nr[p]-nr1[i-1][p]-nr2[j][p])*2>nr[p] && nr[p]-nr1[i][p]-nr2[j-1][p]!=nr[p])
                {
                    ok=0;
                    break;
                }
            }
           if(ok==1)
           d[i][j+1][2]=(d[i][j+1][2]+d[i][j][1]+d[i][j][2])%mod;





       }
   }
   fout<<sol;


    return 0;
}