Зимни празници, 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;
}