Група С

Зимни празници, 2011, С2 – Бягство

#include <iostream>
#include <cstdio>
using namespace std;
int n,m,a[1010][1010],k,r[10101];
int p,x,y,ch,br;
 
void read()
{
    scanf("%d",&n);
    for (int i=0; i<n; i++)
    for (int j=0; j<n; j++)
    scanf("%d",&a[i][j]);
    scanf("%d",&k);
    for (int i=0; i<k; i++) scanf("%d",&r[i]);
}
 
void sol()
{
    for(int i=0; i<k; i++)
    {
        p=r[i];
        x=0; y=n-1;
        ch=a[x][y];
        br=0;
        while (1)
        {
 
            if (p==ch) break;
            if (p>ch)
            {
                if (x==n-1) break;
                x++;
            }
            if (p<ch)
            {
                if (y==0) break;
                y--;
            }
            ch=a[x][y];
            br++;
        }
        if (p!=ch) printf("No Solution\n");
        else printf("%d\n",br);
    }
}
int main ()
{
    read();
    sol();
    return 0;
}

Зимни празници, 2011, С3 – Tрик

#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
char znaci[100005];
int chisla[100005];
int rezultat,o;
 
void read()
{
    do
    {
        cin>>znaci[o];
        scanf("%d",&chisla[o]);
        o++;
        
    }
    while (znaci[o-1]!='=');
     
}
 
void sol()
{
    rezultat=chisla[o-1];
    for (int i=o-2; i>=0; i--)
    {
     if (znaci[i]=='/') rezultat=rezultat*chisla[i];
     if (znaci[i]=='*') rezultat=rezultat/chisla[i];
     if (znaci[i]=='-') rezultat=rezultat+chisla[i];
     if (znaci[i]=='+') rezultat=rezultat-chisla[i];
        //cout<<znaci[i]<<" "<<rezultat<<endl;
    }
    printf("%d\n",rezultat);
}
 
int main ()
{
    read();
    sol();
    return 0;
}

Пролетен турнир, 2011, С1 – Игра

#include<iostream>
using namespace std;
 
int s;
int g;
int h[2];
int a[2][1001];
bool p[2][1000001];
 
int main()
{
  cin >> s;
  cin >> g;
  for(int j=0;j<=1;j++)
  {
   cin >> h[j];
   for(int i=0;i<h[j];i++) cin >> a[j][i];
  }
   
  for(int k=1;k<=s;k++)
  for(int j=0;j<=1;j++)
  {
   for(int i=0;i<h[j];i++)
   if(k-a[j][i]>=0)
   if(!p[1-j][k-a[j][i]]) {p[j][k]=true; break;}
  }
  
  cout << p[g-1][s] << endl;
     
}

Пролетен турнир, 2011, С2 – Сума

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int m,n,u,v,a[3009][3009],b[3009][3009],s,max1=999999999;
 
void read()
{
    scanf("%d %d %d %d",&m,&n,&u,&v);
    for (int i=0; i<m; i++)
    for (int j=0; j<n; j++)
    scanf("%d",&a[i][j]);
}
 
void sol()
{
    for (int i=0; i<m; i++)
    {
        s=0;
        for (int j=0; j<v; j++)
        {
            s=s+a[i][j];
        }
        b[i][0]=s;
        for (int j=v; j<n; j++)
        {
            s=s+a[i][j]-a[i][j-v];
            b[i][j-v+1]=s;
        }
    }
     
     
    for (int i=0; i<n-v+1; i++)
    {
        s=0;
        for (int j=0; j<u; j++) s=s+b[j][i];
        if(max1>fabs(s)) max1=fabs(s);
        for (int j=u; j<m; j++)
        {
            s=s+b[j][i]-b[j-u][i];
            if (fabs(s)<max1) max1=fabs(s);
        }
    }
    printf("%d\n",max1);
}
 
int main ()
{
    read();
    sol();
    return 0;
}

НОИ, 2011, 2 кръг, С3 – Робот

#include <iostream>
#include <cstdio>
using namespace std;
int a[500][500],i,j,m,n,k,r,c,o,s,p,g,r1,r2;
int main ()
{
    scanf("%d %d %d %d",&m,&n,&r,&k);
    if (k%2==0) s=s+r;
    for (i=0; i<m; i++)
    {
        for (j=0; j<n; j++)
        {
            p=p+1;
            a[i][j]=p;
            if (p==r) 
            {
                      g=i;
                      c=j;
            }
        }
    }
    g = (r-1)/n;
    c = (r-1)%n;
    for (o=k; o>=1; o=o-2)
    for (i=0; i<m; i++)
    {
        for (j=0; j<n; j++)
        {
            if (g>i)r1=g-i;
            else r1=i-g;
            if (c>j) r2=c-j;
            else r2=j-c;
            if (r1+r2==o) s=s+a[i][j];
        }
    }
    printf("%d\n",s);        
    return 0;
}

Есенен турнир, 2009, С1 – Игра за богати

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstdlib>
using namespace std;
long long a[1005];
long long sum,el,k,p,min1;
 
void read()
{
     
    while (scanf("%lld",&el)!=-1)
        if (el<=1000) a[el]++;
    sum=el;
    if (sum<=1000) a[sum]--;
}
 
void sol()
{
    long long ts=0,brel=0,prs;
    for (long long i=0; i<=1000; i++)
    {
        if (a[i]<1) continue;
        prs=sum;
        sum=sum-(i-ts)*brel;
        if (sum<0)
        {
            p=prs/brel;
            //cout<<p<<" = "<<prs<<" / "<<brel<<endl;
            min1=ts+p;
            printf("%lld\n",min1);
            exit(0);
        }
        brel+=a[i];
        ts=i;
    }
    p=sum/brel;
    min1=ts+p;
    printf("%lld\n",min1);
}
 
int main ()
{
    read();
    sol();
    return 0;
}

Есенен турнир, 2010, С1 – Различни цифри

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
string a,b;
long long a1,b1;
long long br;
int used[10];
 
void read()
{
    cin>>a>>b;
}
 
long long turn(string ch)
{
    long long ch1=0;
    for (int i=0; i<ch.size(); i++)
    {
        int q1=(int)ch[i]-48;
        ch1=ch1*10+q1;
    }
      
    return ch1;
}
 
int rec(long long num)
{
    if (num>b1) return 0;
    if (num>=a1&&num<=b1) br++;
    for (int i=!num; i<=9; i++) 
    {
        if (used[i]==0) 
        {
            used[i]=1;
            rec(num*10+i);
            used[i]=0;
        } 
         
    }
   }
 
int main ()
{
    read();
    if (a.size()>10) printf("0\n");
    else
    {
        if (b.size()>10) {
            b1=9876543210LL;
             
        }
        else b1=turn(b);
        a1=turn(a);
        rec(0);
          
        printf("%d\n",br);
    }
    return 0; 
}

Есенен турнир, 2010, С2 – Степен

#include <iostream>
#include <cstdio>
using namespace std;
long long m,n,mod,k,a;
 
long long stepen(long long st)
{
    long long a1,b1;
    if (st==1) return a;
    if (st%2==0) 
    {
        a1=stepen(st/2);
        b1=a1;
    }
    else
    {
        a1=stepen(st/2);
        b1=a*a1;
    }
    if (a1>=m) a1%=m;
    if (b1>=m) b1%=m;
    return a1*b1;
}
 
void read()
{
    scanf("%lld %lld",&n,&m);
    for (int i=1; i<=n; i++)
    {
        scanf("%lld",&a);
        a=a%m;
        k=stepen(i+1);
        k=k%m;
        mod=mod+k;
        mod=mod%m;
    }
}
 
int main ()
{
    read();
    printf("%lld\n",mod);
    return 0;
}