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