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