• Зимни празници, 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;
    }
    
  • Вашият коментар

    Вашият имейл адрес няма да бъде публикуван.