Авторські розв'язки задач першого туру у вищій лізі
Задача 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;
}