Турнир за Купата на Декана, 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;
}