Турнир за Купата на Декана

Турнир за Купата на Декана, 2010, F. Гориво

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int n,k,l,pos,a[10000],t;
int mid,k1,m1;
vector<int>b;
 
bool can(int &mid)
{
     k1=0;
     pos=mid;
     while(1)
     {
            int l1=-1;
            int r1=n;
            while (r1-l1>1)
            {
                  m1=l1+(r1-l1)/2;
                  if (a[m1]<=pos) l1=m1;
                  else r1=m1;
            }
            k1++;
            if (l1==-1) l1++;
            pos=a[l1]+mid;
            if (pos>=l) break;
            if (k1>k) break;
     }
     if (k1>k) return 0;
     if (pos>=l)return 1;
 
}
 
int main  ()
{
    int left,right;
    scanf("%d",&t);
    for (int o=0; o<t; o++)
    {
        scanf("%d %d %d",&n,&k,&l);
        for (int i=0; i<n; i++) scanf("%d",&a[i]);
        left=0;
        right=l;
        while (right-left>1)
        {
              mid=left+(right-left)/2;
              if (can(mid)) right=mid;
              else left=mid;
        }
        b.push_back(right);
    }
    for (int i=0; i<t; i++) printf("%d\n",b[i]);
    return 0;
}

Турнир за Купата на Декана, 2010, A. Блага дума

#include <cstdio>
#include <vector>
using namespace std;
vector<string>a;
string p,mp;
char q;
int main ()
{
    int n;
    scanf("%d",&n);
    for (int i=0; i<n; ++i)
    {
        cin>>p;
        a.push_back(p);
    }
     
    for (int i=0; i<n; i++)
    {
        mp=a[i];
        int k=a[i].size();
        for (int j=0; j<k; j++)
        {
            q=a[i][0];
            a[i].erase(0,1);
            a[i]+=q;
            if (a[i]<mp) mp=a[i];
        }
        cout<<mp<<endl;
    }
         
   // system ("pause");
    return 0;
}