Friday, April 15, 2016

Диагональ

Говьд байгуулсан Шинэ Вегас хотын гудамжнууд нь 100 м-ийн урттай тал бүхий квадрат байшингууд болон тэдгээрийн хоорондох гудамжнуудаас тогтоно.



Казиногийн захирал хотын баруун урд буланд оршдог ба зүүн хойд буланд байдаг ажил руугаа өдөр бүр алхдаг.
Захирал үргэлж гудамжаар зүүн тийш эсвэл, хойшоогоо явдаг. Зарим байшингууд доогуураа баруун урдаас зүүн хойш чиглэсэн диаметрийнхээ дагуу арктай ба түүгээр алхах боломжтой.
Түүнд хамгийн богино замын уртыг олоход тусал.
Оролт
Эхний мөрөнд баруунаас зүүн тийш хэдэн эгнээ байшин байгааг илэрхийлэх N тоо болон урдаас хойшоо чиглэлд хэдэн эгнээ байшин байгааг илэрхийлэх M тоо өгөгдөнө (0 < N, M ≤ 1000).
Хоёр дахь мөрөнд доогуураа диагональ арк бүхий байшингуудын тоог илэрхийлэх K бүхэл тоо өгөгдөнө(1 ≤ K ≤ 100).
Дараагийн мөрүүдэд арк бүхий байшингуудын байрлал болох хос эерэг бүхэл тоонууд өгөгдөнө.
Эхний тоо нь байшингийн байрлаж буй баганын дугаар ба баганууд зүүнээс баруун тийш 1-ээс эхлэн дугаарлагдана. Хоёр дахь тоо нь байшингийн байрлаж байгаа мөрийн дугаар ба мөрүүд доороос дээш 1-ээс эхлэн дугаарлагдана.
Гаралт
Хамгийн богино замыг бүхэл тоо хүртэл тоймлож хэвлэнэ.
Жишээ
Оролт
Гаралт
3 2
3
1 1
3 2
1 2
383


Блок

Бодлогын нэр: Блок
Хугацаа: 1 сек

Бат Болд хоёр блокоор байшин барьж тоглож байгаа ба ингэхдээ тэр хоёр хоёулаа тус тусдаа сондгой тооны N ширхэг байшин цувуулан барив. Батын барьж байгаа байшингуудыг эхнээс нь mi гэж дугаарлаад мөн Болдын байшингуудыг si гэж дугаарлая (1 <= i <= N).
            Тэр хоёр өөрсдийн барьсан байшингуудаа бүгдийг нь харгалзан si болон miнь тэнцүү өндөртэй болгохоор шийдэв. Ингэхдээ дараах дүрмийг барина:
            Байшингуудын зүүн талаас эхлэх ба эхлээд бүх байшингуудын өндрүүдийг эрс буурах байдлаар болгоод хамгийн голын байшин хүрсний дараа дараачийн байшингуудын өндрийг эрс өсөх байдлаар өөрчлөхөөр болов. Ингэхдээ мөн дурын дараалсан хоёр байшингийн өндрийн зөрөөг 1 байлгана. Доорх зургаас тодорхой харна уу.

  
           




Ямар нэгэн байшингийн өндрийг өөрчлөхдөө тухайн байшингийн дээрээс нь нэг блок аваад хаяж болно (үүнийгээ дахин ашиглахгүй) эсвэл уутнаас шинэ блок гаргаж тухайн байшингийн дээр нь давхарлаж тавих гэсэн 2 үйлдэл зөвшөөрөгдсөн (саванд хангалттай тооны блок байгаа гэж үз).
            Таны даалгавар бол Бат Болд хоёрын тус тусдаа барьсан байшингуудын өндрүүд өгөгдсөн (хамгийн зүүн талаасаа) бол дээр дурьдсан байдлаар байшингуудаа өөржлөхөд хийгдэх хамгийн бага үйлдлийн тоог олох явдал юм.
           
Оролт:
Оролтын файлын эхний мөрөнд сондгой N (1 <= N <= 300 000) буюу Бат Болд хоёрын тус тусдаа барьж буй байшингуудын тоо.
Дараачийн хоёр мөрт тус бүр N тоо байх ба энэ нь эхлээд Батын барьсан байшингуудын өндрүүд зүүн талаасаа эхлэн өгөгдөнө mi. Дараа нь Болдын барьсан байшингуудын өндрүүд мөн зүүн талаасаа эхлэн өгөгдөнө si.
(0 <= mi<= 1012) (0 <= si<= 1012).
Гаралт:
Бодлогын хариу болох ганц тоо.

Жишээнүүд:
Оролт
Оролт
3
1 2 3
3 2 2
5
2 3 0 1 4
3 3 2 3 1

Гаралт
Гаралт
3
10

Тайлбар:

1-р жишээн дээр Бат эхний байшин дээрээ 2 блок тавина харин Болд 3 дахь байшин дээрээ нэг блок тавихад адилхан болно.

Monday, March 9, 2015

Tuesday, March 25, 2014

Teamviewer install

ЭНД ДАР






http://www.4shared.com/rar/yxskNsyKba/TeamViewer__v416597_Full_Versi.html?

Thursday, March 20, 2014

Friday, April 5, 2013

Сургуулийн шатны мэдээлэл зүйн олимпиад буюу Сорил №1-ийн бодолтууд

1. Зэрэг хуваагдал
2. Үг давт
3. Хурд хэмжигч
4. Куб нийлбэр
5. Ханой
6. Шагнал
7. Цифрүүдийн нийлбэр
8. Зоос
9. Утасны дугаар
10. Нийлбэр ол
гэсэн 10 бодлого оруулав. Эхний гурван бодлогыг бүх хүн бодож чадах байх гэж бодсон боловч тийм байсангүй. Эхний нэг бодлогыг л бүгд бодов. Бодолтыг сайн муу гэж ялгахгүй оруулах тул та бүхэн өөрт хэрэгтэй бодолтоо сонирхож үзээрэй. Өөрөөр хэлбэл бодлого оруулсан хүний бодолт мөн бодсон хүний бодолтыг бас оруулахыг хичээнэ. Мөн бодлого санал болгож дэвшүүлж байсан анд М.Түвшинсайхандаа баярлалаа.
Ингээд бодолтууд:
Зэрэг хуваагдал 
             if(n%40==0 && i%40==0) printf("YES"); 
                 else printf("NO");
Үг давт
             scanf("%d",&n);         
             for(i=1;i<=n;i++)
                printf("HOME\n");
Хурд хэмжигч (Нэгийнх нь бодолтыг шууд оруулав.)
#include 
#include 
using namespace std; 
int main() 
{ 
     int b;
     double m,a;
     scanf("%lf",&a);
     m=a*1.609344; 
     if(m>60 || b==6666 && b==8888 && b==9999)           printf("NORMAL"); 
      else printf("FAST");
     system ("pause");
     return 0;
}
Куб нийлбэр Энэ бодлогыг бодсон heyhey-ийн бодолт
    scanf("%d", &n);
    printf("%d", (n*(n+1)/2)* (n*(n+1)/2));
Мөн өөр нэг бодолт тестийн хувьд бага тест өгсөн тул давталт ашиглаж бодход болохгүй зүйл байгаагүй билээ.
   scanf("%d",&n);
  for(i=1;i<=n;i++)
  {
     s=s+(i*i*i);
  }
  printf("%d",s);
Ханой Энэ сорилд бодоогүй хоёр бодлогын нэг нь энэ байв. Хялбар рекурэнт томъёо гаргаад түүнээсээ ерөнхий гишүүний томъёо олход болох юм. Нийт боломжийн тоог a_n гэвэл a_n=2^n-1 болж бодогдоно.
Шагнал Энэ бодлого 2011 онд Мэдээлэл зүйн улсын олимпиадад сурагчдын төрөлд ирж байсан гэдгийг бичсэн байсан тул их хүндээр сэтгэсэн байж магадгүй нэг л хүн бодсон байв. Бас өгсөн жишээ тестийн хувьд нэлээн бүрхэг тест өгсөн. Дараа нь комент дээр арай дөхүүлэх үүднээс нэг жишээ тест нэмж хийсэн тул бодсон байж магадгүй ккк.
Түүний бодолтыг оруулав.
    scanf("%d", &n);
    printf("%d ", n+1);
    for(i=2;i<=n;i++)
    printf("%d ", i);
Цифрүүдийн нийлбэр Тийм ч хүнд биш тэхдээ давталт, массив, тэмдэгт мөр, тэмдэгтийн ASCII код зэрэг элементүүдийг мэдсэн үед бодож болно. Эдгээр нь хамгийн энгийн чухал элементүүд болно. Бас л нэг хүн бодсон байв. Түүний бодолтыг оруулав. Өгсөн тэмдэгт мөрийн уншаад түүнийг тэмдэгт болгоныг нэг нэгээр нь салгаад тэгийн /0/ код болох 48-ийг хасаж тоо болгоод нэмээд байна. Өөрөөр хэлбэл '8' гэсэн тэмдэгт 56 кодтой тул 8=56-48 болж 8 гэсэн тоо гарч байгаа юм.
  char st[1000000];
  int s=0,i;
  scanf("%s", st);
  for(i=0;i
       s=s+(st[i]-48);
  printf("%d", s);
Зоос  Нэг ч хүн бодоогүй хоёр бодлогын нэг нь энэ. Нийт боломжийн тоог a_n гэвэл a_n=2^n болох болно. Одоо өгсөн n тооны хувьд хоёрын зэргийг ол гэсэн бодлого болж байна. Хоёрын зэргийг яаж ч болж болно давталт болон pow функц хоёроор олох боломжтой.

  scanf("%d", &n);
  for(i=1;i<=n;i++)
  {
     s=s*2;
  }
  printf("%d", s); 

Утасны дугаар  Дараа нэмэлтийг бичхээс: Дараах хоёр хүний бодолтыг оруулав. Бичиглэл өөр болхоор оруулсан юм шүү. Нэг нь эмхтгээд нөгөө нь эмхтгээгүй бодолтууд.
demberelsaihan -ний бодолт
   scanf("%d",&n);
   printf("%d",10*n+9);
heyhey -ийн бодолт
  scanf("%d", &n);
  printf("%d", 9*(n+1)+n);
Нийлбэр ол Тайлбар маань Куб нийлбэртэй ялгаа байхгүй. Дараах хоёр бодолтыг оруулав.
demberelsaihan-ний бодолт:
  scanf("%d",&n);
  a=((n+1)*(2*n+1)*n/6+3*(n+1)*n/2-n);
  printf("%d",a);
namuun -ний бодолт
  cin>>n;
  for(i=1;i<=n;i++){
    s=(i*i+3*i-1);
    l=l+s;
 }
 cout<