Авторські розв'язки задач першого туру у вищій лізі

Задача 1.

#include <iostream.h>
#include <fstream.h>
#include <string.h>

int main()
{
ifstream fin("number.dat");
ofstream fout("number.sol");

int i,j,l,ost;
char *s; int *m;

s = new char[1001];
fin >> s;

l=strlen(s);
m=new int[l];
for (i=0; i<l; i++) m[i]=s[i]-48;

for (i=0; i<l/2; i++)
 {

  if (m[i]<m[l-i-1])
    { ost=1;
      for (j=l-i-2; j>=0; j--) { m[j]+=ost; ost=m[j]/10; m[j]%=10; }
    }
  m[l-i-1]=m[i];
 }

for (i=0; i<l; i++) fout << m[i];
fout << endl;
return 0;
}

Задача 2

#include <stdio.h>

int main()
{
FILE *in,*out;
in = fopen("inverse.dat","r");
out = fopen("inverse.sol","w");

double res[19][154];
int n,k,i,j,l;

fscanf(in,"%d%d",&n,&k);

if (k>n*(n-1)/2)
{
j fprintf(out,"0\n"); fclose(out);
 return 0;
}

for (i=0; i<=n; i++)
 for (j=0; j<=k; j++) res[i][j]=0;
res[0][0]=1;

for (i=1; i<=n; i++)
 for (j=0; j<=k; j++)
  for (l=1; l<=i; l++)
   if (j>=i-l) res[i][j]+=res[i-1][j-i+l];

fprintf(out,"%.0f\n",res[n][k]);
fclose(out);
return 0;
}

Задача 3.

#include <iostream.h>
#include <fstream.h>

int minn(int a,int b)
{
        if (a<b) return a; else return b;
}

int main()
{
       ifstream fin("chase.dat");
       ofstream fout("chase.sol");

       int C[51][51],F[51][51],H[51],E[51];
       int n,k,s,t,k1,k2,i,j;
       fin >> n >> k >> s >> t;
       for (i=1; i<=n; i++)
       {
           H[i]=0; E[i]=0;
           for (j=1; j<=n; j++) { C[i][j]=0; F[i][j]=0;}
       }

       for (i=1; i<=k; i++)
       {
           fin >> k1 >> k2;
           C[k1][k2]=1;
           C[k2][k1]=1;
       }

       H[s]=n;
       for (j=1; j<=n; j++) { F[s][j]=C[s][j]; F[j][s]=-C[s][j]; E[j]=C[s][j];}

       int fl=1; int d,min;
       while (fl)
       {
            fl=0;
            for (i=1; i<=n; i++) if ((E[i]>0)&&(i!=t)&&(i!=s))
            {
               for (j=1; j<=n; j++) if ((C[i][j]-F[i][j]>0)&&(H[i]==H[j]+1))
               {
                    d=minn(E[i],C[i][j]-F[i][j]);
                    F[i][j]+=d; F[j][i]-=d;
                    E[i]-=d; E[j]+=d;
                    fl=1;
               }
               if (E[i]>0)
               {
                    min=100;
                    for (j=1; j<=n; j++) if ((C[i][j]-F[i][j]>0)&&(H[j]<min)) min=H[j];
                    if (min<100) { H[i]=min+1; fl=1;}
               }
            }
       }

       fout << E[t] << endl;
       return 0;
}