A. Puzzle

Jadvalda sonlarni ketma-ket joylashtirilsa, bir elementning ikki qo'shisi aniq bir biridan farqli bo'ladi (o'zi juft bo'lsa qo'shi toq, o'zi toq bo'lsa qo'shnisi juft bo'ladi). Misol tariqasida quyidagi joylashtirish usulini ko'rishingiz mumkin: 1,2,3,4,5,6… . Bu misoldan ko'rinib turibdiki ikki yon qo'shnini farqli qilib joylashtirish muammo emas.
Ammo jadvaldagi elementning yuqoridagi va pastdagi qo'shnilarini joylashtirishda biroz muammoga duch kelishimiz mumkin. Bu holda N soni juft son bo'lsa boshqacha usulda, toq son bo'lsa boshqacha usulda joylashtirish kerak. 
N=juft holati uchun:
-----→
←-----
-----→
←-----

N=toq holati uchun:
-----→
-----→
-----→
-----→
….

Shunda sonlarda aniq hamma qo'shnilari bir biridan farqli usulda joylashadi.

Masala yakunida shuni anglab yetish mumkin, N ning har qanday qiymatida masala shartini qanoatlantirish mumkin. Demak masala doim YES qiymay qaytaradi.

B. ID karta

Bu masala input-output turidagi masalalarga kiradi. Bu Masalada deyarli algoritm ishlatilmaydi, stringlar bilan ishlashning o'zi kifoya. 

Masalada har bir qatorda berilgan stringlarni 3 ta o'zgaruvchiga yozib olinsa va chiqish faylida birinchi va uchinchi stringlarning bosh harflari, ikinchi stringning esa to'liq o'zi chiqarilsa yetarli. Bir qatordagi harbir chiqivchi ma'lumotlar orasida nuqta qo'yish kerak.

loop():
      input a,b,c
loop()
     output a[0]+'.'+c[0]+'.'+b

C. Toshbaqa va quyon poygasi

Bu masalada eng avvalo x, a, n sonlarini bir qatorda qabul qilib olamiz. Quyon turgan kordinatani 2an(2 * a * n) deb belgilaymiz sababi har daqiqada 2 * a metr harakatlanadi va bizda n daqiqa bor. Toshbaqani esa x + an deb belgilaymiz. Sabab u quyondan x metr uzoqda va daqiqasiga a metrdan n daqiqa yura oladi. Endi shart operatori orqali qaysi ishtirokchi uzoq kordinatada turganini tekshiramiz. Sabab kim uzoqda bo'lsa o'sha avval marraga borgan bo'ladi. Endi esa holatlarni tekshirib kim yutganini ekranga chiqaramiz.

input x,a,n 
quyon = 2 * a * n
toshbaqa = x + a * n
if quyon > toshbaqa
    output "Quyon"
elif toshbaqa == quyon
    output "Draw"
else
    output “Toshbaqa”

D. Tom va klaviatura

Endi esa logic jihatdan biroz o'ylanamiz. Agar menda "salom" texti bo'lsa, a harfi ishlaydigan klaviaturaga o'tiraman aks holda bitta qo'shimcha tugma bosib klaviaturani almashtirishimga to'g'ri keladi. Lekin agar menga "azizlar" texti kiritilsa, z harfi ishlaydigan klaviaturaga o'tirishim kerak. Aks holda yana shu muammo bo'ladi. Lekin "robocontest" texti kiritilsa istalgan klaviaturani tanlashim mumkin. Yani bu holat ko'rilishi shart emas.Men shart operatorlarini kamaytirish uchun faqat kichik harf bilan ishlashni afzal ko'rdim. Kiritilgan Inputimda avval a, b, z, y harfilaridan qaysinisi kiritilishini bilishim kerak. Agar a yoki b kiritilsa birinchi o'tirgan klaviaturam a harfi ishlaydigan klaviatura deb flag nomli o'zgaruvchiga o'zgartirib qo'yaman. Agar z va y kiritilgan bo'lsa unda ikkinchi klaviaturani o'zlashtiraman. Bu tekshirish faqat birinchi kelgan harfni aniqlash uchun kerak. Shu uchun yuqorida flag o'zgaruvchimni 0 ga tenglayman va pastda tutib olaman.Endi holatiga qarab klaviatura almashtiramiz agar men o'tirgan klaviaturamda a yoki b ishlamasa-yu a yoki b harfi kiritilib qolsa u holda ctrlni bosib klaviaturani almashtiraman. Yoki buning aksi bo'lishi mumkin. agar Bu shartim bajarilib qolsa chiquvchi malumotimni 2taga orttiraman sababi ctrl+a holatda ikkita tugma bosildi. Eng so'ngi holatda hech qanday tekshirishim kerak bo'lmasa bir qo'shaman yani harfni o'zini. Chalg'ituvchi holatlardan biri esa masalan "BZAA" Texti kiritilsa javob qanday bo'ladi B +Z +Ctrl A + A yani 5 ta. Shu shartni ham tekshirish maqsadida Aynan hozir qaysi klaviaturada turganimni saqlab bordim va shart operatorida tutib oldim.

input s
ans = 0
flag = 0
loop(s)
   if loop(index) in "ab" and flag == 0
      flag = 1
   if loop(index) == "zy" and flag == 0
      flag = 2
  if loop(index) == "zy" and flag == 1
      flag = 2
      ans+=2
  elif loop(index) == "ab" and flag == 2
      flag = 1
      ans+=2
  else
      ans++
output ans

E. Matematik ifoda

Bu masalada siz berilgan sonning raqamlari orasga 0 dan 9 gacha bo'lgan raqamlarni qo'yib chiqish kerak. Ularning orasida eng minimal son tanlab olinadi.

N, M = map(int, input().split())
N_str = str(N)
candidates = []
for i in range(len(N_str)+1):
   for j in range(int(i == 0), 10):
       _N = int(N_str[:i] + str(j) + N_str[i:])
       if _N % M == 0:
           candidates.append(_N)
print(min(candidates))

F. Shashka o'yini

Shashka o'yini masalasi “brute forse” usulida yechiladi. Bunda siz oq donalarning barcha holatlarini ko'rib chiqishingiz kerak bo'ladi. Shaxmat donasi bir joyda aylanib qolmasligi uchun har bir urilgan donani eslab qolishingiz kerak. Masalaning qiyinchiligi esa shaxmat donasi bir marta bosib o'tgan katakchasidan yana o'tishi mumkin va bu holatda yangi yo'nalishda harakatlanadi.

 #include <bits/stdc++.h>
#define int long long
const int mod=1e9+7;
const int N=2e5+5;
const int inf=1e18;
using namespace std;
int n, res=0, c=0;
vector<vector<char>> g;
void dfs( int x, int y, vector<vector<bool>> vis, int cnt ){
    c++;
    if ( min(x,y)<1 || max(x,y)>n ){
        res=max(res,cnt);
        return;
    }
    if ( g[x+1][y+1]=='&' && !vis[x+1][y+1] && max(x+2,y+2)<=n && g[x+2][y+2]=='#' ){
        vis[x+1][y+1]=1;
        res=max(res,cnt+1);
        dfs(x+2,y+2,vis,cnt+1);
        vis[x+1][y+1]=0;
    }
    if ( g[x+1][y-1]=='&' && !vis[x+1][y-1] && x+2<=n && y-2>=1 && g[x+2][y-2]=='#' ){
        vis[x+1][y-1]=1;
        res=max(res,cnt+1);
        dfs(x+2,y-2,vis,cnt+1);
        vis[x+1][y-1]=0;
    }
    if ( g[x-1][y-1]=='&' && !vis[x-1][y-1] && max(x-2,y-2)>=1 && g[x-2][y-2]=='#' ){
        vis[x-1][y-1]=1;
        res=max(res,cnt+1);
        dfs(x-2,y-2,vis,cnt+1);
        vis[x-1][y-1]=0;
    }
    if ( g[x-1][y+1]=='&' && !vis[x-1][y+1] && x-2>=1 && y+2<=n && g[x-2][y+2]=='#' ){
        vis[x-1][y+1]=1;
        res=max(res,cnt+1);
        dfs(x-2,y+2,vis,cnt+1);
        vis[x-1][y+1]=0;
    }
}
void solve(){
    n=8;
   g=vector<vector<char>>(n+5,vector<char>(n+5,'.'));
   vector<pair<int,int>> vc;
   for ( int i=1; i<=n; i++ ){
       for ( int j=1; j<=n; j++ ){
           cin >> g[i][j];
           if ( g[i][j]=='@' ){
               vc.push_back({i,j});
           }
       }
   }
     res=0;
   for ( auto [x,y]:vc ){
       vector<vector<bool>> vis(n+5, vector<bool>(n+5));
         g[x][y]='#';
       dfs(x,y,vis,0);
         g[x][y]='@';
   }
   cout << res;
}
signed main(){
   ios_base::sync_with_stdio(false);cin.tie(0);
   int t=1;
   for ( int test=1; test<=t; test++ ){
       solve();
       if ( test!=t ) cout << '\n';
   }
}