Pagini recente » Cod sursa (job #727089) | Cod sursa (job #3236770) | Cod sursa (job #2761900) | Cod sursa (job #50886) | Cod sursa (job #613510)
Cod sursa(job #613510)
#include<cstdio>
#include<fstream>
using namespace std;
int n,a[100],k;
int grup(int a[100],int p,int n)
{
int i;
for (i=n;i>=n-k;--i)
{
a[i]=a[i]-1;
}
return p+1;
}
void test(int n)
{int i;
for(i=1;i<=n;++i)
printf("%d",a[i]);
}
int ordonat(int li,int ls)
{
int m;
m=(li+ls)/2;
if (ls==li)
return 1;
else
{
int ok1=ordonat(li,m);
int ok2=ordonat(m+1,ls);
if (ok1==1&&ok2==1&&a[m]<=a[m+1])
return 1;
else
return 0;
}}
void stergere(int i)
{int j;
for(j=i+1;j<=n;++j)
a[j-1]=a[j];
--n;
}
int pozitie(int li,int ls,int x)
{
int m;
m=(li+ls)/2;
if (li==ls)
if(x<=a[li])
return li;
else
return li+1;
else
{
if(a[m]>x)
return pozitie(li,m,x);
else
return pozitie(m+1,ls,x);
}
}
void inserare(int x,int li,int&n)
{
int i;
for (i=n;i>=li;--i)
a[i+1]=a[i];
a[li]=x;
++n;
}
int d(int n)
{
int i=1;
while(a[i]<=a[i+1])
{
++i;
}
return i;
}
int main()
{
int i,k,n,a[100],x;
int p=0;
FILE* f=fopen("grupuri.in","r");
FILE* g=fopen("grupuri.out","w");
fscanf(f,"%d%d",&k,&n);
for(i=1;i<=n;++i)
fscanf(f,"%d",&a[i]);
p=grup(a,0,n);
test(n);
while(n>=k)
{test(n);
if (ordonat(1,n)==1)
p=grup(a,p,n);
else
{
int h=d(n);
int x=a[h];
stergere(h);
int r =pozitie(1,n,x);
inserare (x,r,n);
}
for(i=n;i>=1;--i)
if(a[i]==0)
stergere(i);
}
fprintf(g,"%d",p);
fclose(f);
fclose(g);
}