Edisi # 26: Pelatihan TI - masalah saat ini dan tantangan dari perusahaan terkemuka

Mendesak di kamar! Menghidupkan kembali pelatihan IT heading. Kami kembali mengumpulkan pertanyaan dan tugas yang diajukan pada wawancara di perusahaan IT.

gambar

Masalah akan muncul setiap minggu - tetap disini! Kolom ini didukung oleh agen perekrutan Spice IT .

Hari ini kami memiliki tugas - dengan tingkat kerumitan yang sangat berbeda - dari wawancara dengan perusahaan India Flipkart. Nah, sudahkah melewati jaminan sosial?

Pertanyaan


1. Pencuri, Harta Karun, dan 2 Pintu
Seorang pencuri baru saja menemukan sepasang gua harta karun kuno. Salah satu gua dipenuhi dengan harta yang luar biasa dan yang lainnya memiliki monster api yang akan memakan siapa saja yang membuka gua itu.
Satu gua memiliki pintu hitam dihiasi berlian dan gua lainnya memiliki pintu cokelat dihiasi safir.
Setiap pintu memiliki deskripsi terukir di atas. Deskripsi mengatakan:

Black Door: Monster ada di sini.
Brown Door: Only One Door mengatakan yang sebenarnya.

Pintu mana yang harus dibuka pencuri?

Terjemahan
Pencuri itu baru saja menemukan beberapa gua kuno. Salah satu gua dipenuhi dengan harta yang luar biasa, dan yang lainnya adalah monster api yang akan memakan siapa saja yang membuka gua ini.
Pintu masuk ke gua pertama diblokir oleh pintu hitam dihiasi dengan berlian, dan ke pintu lain - pintu cokelat dihiasi dengan safir.
Setiap pintu memiliki deskripsi terukir di atas. Deskripsi berbunyi:

Pintu hitam: monster ada di sini.
Pintu cokelat: hanya satu pintu yang mengatakan yang sebenarnya.

Pintu apa yang harus dibuka oleh pencuri?

2. Temukan usia anak perempuan
Alok memiliki tiga anak perempuan. Temannya, Shyam, ingin mengetahui usia anak perempuannya. Alok memberinya petunjuk pertama.
  1. Produk usia mereka adalah 72. Shyam mengatakan ini tidak cukup informasi yang diberikan Alok kepadanya.
  2. Jumlah umur mereka sama dengan nomor rumah saya. Shyam keluar dan melihat nomor rumah dan berkata, "Saya masih belum memiliki informasi yang cukup untuk menentukan umur". Alok mengakui bahwa Shyam tidak bisa menebak dan memberinya petunjuk ketiga
  3. Yang tertua dari gadis-gadis suka es krim stroberi. Shyam dapat menebak setelah petunjuk ketiga.

Bisakah Anda menebak usia tiga anak perempuan berapa?

Terjemahan
Alok memiliki tiga anak perempuan. Temannya, Shiyam, ingin mengetahui usia anak perempuannya. Alok memberinya petunjuk pertama.
  1. Produk dari usia mereka adalah 72. Shiyam mengatakan bahwa informasi ini tidak cukup, maka Alok memberinya petunjuk kedua.
  2. Jumlah umur mereka sama dengan jumlah rumah saya. Shiyam keluar, melihat nomor rumah dan berkata: "Saya masih belum memiliki informasi yang cukup untuk menentukan umur." Alok mengakui bahwa Shiyam tidak akan bisa menebak, dan karena itu memberinya petunjuk ketiga.
  3. Yang tertua dari gadis-gadis suka es krim stroberi. Hanya setelah petunjuk ketiga, Shiyama berhasil menebak usia putrinya.

Bisakah Anda menebak usia masing-masing dari ketiga anak perempuan itu?

Tugasnya


1. Tom and Jerry
Sejak lama sekali, Tom dan Jerry saling bertarung demi sepotong keju. Jadi akhirnya Anda datang untuk menyelamatkan dan memutuskan bahwa hasil pertarungan akan ditentukan oleh permainan matematika, di mana Anda akan menulis angka N (1 <= N <= 10^6) . Tom and Jerry akan memainkan permainan sebagai alternatif dan masing-masing dari mereka akan mengurangi angka n [n < N] sehingga N % n = 0 .
Permainan diulangi secara bergantian sampai yang, yang sekarang tidak bisa bergerak lebih jauh kehilangan permainan.
Permainan dimulai dengan Tom memainkan langkah pertama. Sangat dipahami bahwa keduanya akan bergerak secara optimal. Anda harus menentukan siapa yang memenangkan permainan.

Input: baris pertama dari setiap kasus uji terdiri dari N nomor.
Keluaran: cetak 1 jika Tom menang dan cetak 0 jika Jerry menang di baris terpisah.

Kendala:
1 <= N <= 10^6

Sampel:
Input: 2 / Output: 1
Input: 4 / Output: 1

Terjemahan
Untuk waktu yang lama, Tom dan Jerry saling bertarung demi sepotong keju. Anda memutuskan untuk membantu mereka menentukan pemenang dengan cepat. Hasil pertandingan akan ditentukan dalam permainan matematika di mana Anda akan menulis angka N (1 <= N <= 10^6) . Tom and Jerry akan memainkan game satu per satu. Masing-masing akan mengurangi angka n [n < N] sehingga N % n = 0 .
Permainan berlanjut sampai salah satu peserta dapat bergerak. Siapa pun yang tidak bisa melakukan langkah terakhir akan kalah.
Permainan dimulai dengan Tom membuat langkah pertama. Jelas bahwa keduanya akan bergerak secara optimal. Anda harus menentukan siapa yang memenangkan permainan.

Input: baris input pertama dari setiap tes terdiri dari angka N.
Program harus menampilkan: 1, jika Tom menang; 0 jika Jerry menang. Di jalur terpisah.

Keterbatasan:
1 <= N <= 10 ^ 6

Contoh
Input: 2 / Output: 1
Input: 4 / Output: 1

2. N pertemuan dalam satu ruangan
Ada satu ruang rapat di sebuah perusahaan. Ada N pertemuan dalam bentuk (S[i], F[i]) mana S [i] adalah waktu mulai pertemuan i dan F [i] adalah waktu selesai pertemuan i.
Berapa jumlah maksimum pertemuan yang dapat ditampung di ruang pertemuan?

Masukan:
Baris input pertama terdiri dari jumlah kasus uji. Deskripsi kasus uji T adalah sebagai berikut:
Baris pertama terdiri dari ukuran array, baris kedua memiliki array yang berisi waktu mulai dari semua pertemuan yang masing-masing dipisahkan oleh spasi, yaitu, S [i]. Dan baris ketiga memiliki array yang berisi waktu penyelesaian semua pertemuan yang masing-masing dipisahkan oleh spasi, yaitu, F [i].
Keluaran:
Di setiap baris yang terpisah, cetak urutan rapat berlangsung dipisahkan oleh spasi.

Kendala:
1 ≀ T ≀ 70
1 ≀ N ≀ 100
1 ≀ S[ i ], F[ i ] ≀ 100000


Contoh:
Masukan:
2
6
1 3 0 5 8 5
2 4 6 7 9 9
8
75250 50074 43659 8931 11273 27545 50879 77924
112960 114515 81825 93424 54316 35533 73383 160252

Keluaran:
1 2 4 5
6 7 1

Terjemahan
Perusahaan memiliki satu ruang pertemuan. Ada N pertemuan dalam bentuk (S [i], F [i]) , di mana S [i] adalah waktu mulai pertemuan i, dan F [i] adalah waktu akhir pertemuan i.
Tugasnya adalah untuk menempatkan jumlah pertemuan maksimum di ruang pertemuan.

Input data:
Baris input pertama berisi jumlah tes. Deskripsi tes terlihat seperti ini:
β€’ baris pertama terdiri dari ukuran array;
β€’ baris kedua memiliki larik yang berisi waktu mulai semua rapat S [i], yang masing-masing dipisahkan oleh spasi;
β€’ baris ketiga berisi larik yang berisi waktu akhir semua pertemuan F [i], yang masing-masing dipisahkan oleh spasi.
Kesimpulan:
di setiap baris terpisah cetak urutan rapat berlangsung, dipisahkan oleh spasi.

Keterbatasan:
1 ≀ T ≀ 70
1 ≀ N ≀ 100
1 ≀ S [i], F [i] ≀ 100000


Contoh:
Masukan:
2
6
1 3 0 5 8 5
2 4 6 7 9 9
8
75250 50074 43659 8931 11273 27545 50879
77924 112960 114515 81825 93424 54316 35533 73383 160252

Keluaran:
1 2 4 5
6 7 1


3. Pembalikan array
Diberikan array bilangan bulat positif. Tugasnya adalah untuk menemukan jumlah inversi array.
Hitungan Pembalikan: Untuk sebuah array, jumlah inversi menunjukkan seberapa jauh (atau menutup) array yang sedang diurutkan. Jika array diurutkan dalam urutan terbalik, jumlah inversi adalah maksimum.
Secara formal, dua elemen a [i] dan a [j] membentuk inversi jika a[i] > a[j] dan i < j .

Input: Baris input pertama berisi bilangan bulat T yang menunjukkan jumlah kasus uji. Baris pertama dari setiap test case adalah N, ukuran array. Baris kedua dari setiap test case berisi elemen N.
Output: Cetak jumlah inversi array.

Kendala:
1 ≀ T ≀ 100
1 ≀ N ≀ 107
1 ≀ C ≀ 1018


Contoh:
Masukan:
1
5
2 4 1 3 5

Keluaran:
3

Terjemahan
Sejumlah bilangan alami diberikan. Tugasnya adalah untuk menemukan jumlah inversi dari array.
Jumlah inversi: untuk sebuah array, jumlah inversi menunjukkan seberapa jauh (atau menutup) array dari pengurutan. Jika array sudah diurutkan, maka jumlah inversinya adalah 0. Jika array diurutkan dalam urutan terbalik, maka jumlah inversi adalah maksimum.
Secara formal, dua elemen a [i] dan a [j] membentuk inversi jika a[i] > a[j] dan i < j .

Input data:
baris pertama berisi bilangan bulat T, yang menunjukkan jumlah tes. Baris pertama dari setiap tes adalah N, ukuran array. Baris kedua dari setiap tes berisi elemen N.
Keluaran:
cetak jumlah inversi dari array.

Keterbatasan:
1 ≀ T ≀ 100
1 ≀ N ≀ 10 7
1 ≀ C ≀ 10 18


Contoh:
Masukan:
1
5
2 4 1 3 5

Keluaran:
3


Yah, seperti yang dijanjikan! Banyak yang bisa menjawab pertanyaan, tetapi dengan tugas-tugas itu, ternyata, itu lebih sulit! :)

Jawabannya


Pertanyaan 1
Jawab: di pintu hitam.
Solusi: mari kita lihat deskripsi pada pintu cokelat β€œhanya satu pintu yang mengatakan yang sebenarnya.” Itu bisa benar atau salah.
Skenario 1: Deskripsi pintu cokelat benar. Maka deskripsi di pintu hitam ("monster ada di sini") harus menjadi kebohongan. Ini berarti bahwa gua dengan pintu hitam berisi harta karun!
Skenario 2: deskripsi pada pintu cokelat salah. Maka kedua deskripsi tersebut salah atau keduanya benar. Kedua deskripsi tidak mungkin benar, karena ini tidak mungkin dan tidak konsisten. Ini berarti bahwa kedua deskripsi tersebut salah. Sekali lagi, harta karun di pintu hitam.

Pertanyaan 2
Jawaban: anak perempuan usia: 3 tahun, 3 tahun dan 8 tahun.
Solusi: 1) Sebagai permulaan, dikatakan bahwa produk usia adalah 72 tahun.
Temukan semua opsi yang memungkinkan untuk produk yang akan sama dengan 72:
  • 1 * 1 * 72 = 72
  • 1 * 2 * 36 = 72
  • 1 * 3 * 24 = 72
  • 1 * 4 * 18 = 72
  • 1 * 6 * 12 = 72
  • 1 * 8 * 9 = 72
  • 2 * 2 * 18 = 72
  • 2 * 3 * 12 = 72
  • 2 * 4 * 9 = 72
  • 2 * 6 * 6 = 72
  • 3 * 3 * 8 = 72
  • 3 * 4 * 6 = 72

Ini, tentu saja, tidak cukup untuk memberikan jawaban yang tepat.
Selanjutnya, Shiyam melihat nomor rumah (nomor mana yang tidak dilaporkan) dan masih belum bisa memberikan jawaban yang pasti. Ringkas semua opsi yang ditemukan sebelumnya:
  • 1 + 1 + 72 = 74
  • 1 + 2 + 36 = 39
  • 1 + 3 + 24 = 28
  • 1 + 4 + 18 = 23
  • 1 + 6 + 12 = 19
  • 1 + 8 + 9 = 18
  • 2 + 2 + 18 = 22
  • 2 + 3 + 12 = 17
  • 2 + 4 + 9 = 15
  • 2 + 6 + 6 = 14
  • 3 + 3 + 8 = 14
  • 3 + 4 + 6 = 13

Jelas, salah satu jumlahnya adalah nomor rumah. Karena Shiyam tidak bisa menjawab dengan tepat, kesimpulan yang pasti adalah bahwa nomor rumah adalah 14, karena ada dua opsi dengan hasil ini.
  • 2 + 6 + 6 = 14
  • 3 + 3 + 8 = 14

3) Dari petunjuk ketiga, harus dipahami bahwa ada anak perempuan yang lebih tua (bukan beberapa, tetapi satu), jadi dari dua opsi yang kami temukan di langkah kedua, hanya satu yang cocok.

Tugas 1
Lolohaev berpikir benar!
Jawab: (n - 1) % 2
Solusi:
 using System; public class TomJerry { static public void Main () { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); System.out.printIn((n - 1) % 2); } } 


Tugas 2
Solusinya menggunakan algoritma Greedy.
 #include <bits/stdc++.h> using namespace std; struct Activity { int start, finish, index; }; bool activityCompare(Activity s1, Activity s2) { return s1.finish < s2.finish; } int main() { int t, n, i, j; cin >> t; while (t--) { cin >> n; Activity arr[n]; for (i = 0; i < n; i++) { cin >> arr[i].start; arr[i].index = i; } for (i = 0; i < n; i++) cin >> arr[i].finish; sort(arr, arr + n, activityCompare); i = 0; cout << arr[i].index + 1 << " "; for (int j = 1; j < n; j++) { if (arr[j].start >= arr[i].finish) { cout << arr[j].index + 1 << " "; i = j; } } cout << endl; } return 0; } 


Tugas 3
 #include<iostream> using namespace std; int merge(int* arr, int* LArr, int* RArr, int m, int n) { int i = 0, j = 0, k = 0; int count = 0; while (i < m && j < n) { if (LArr[i] <= RArr[j]) arr[k++] = LArr[i++]; else { arr[k++] = RArr[j++]; count = count + m - i; } } while (i < m) arr[k++] = LArr[i++]; while (j < n) arr[k++] = RArr[j++]; return count; } int mergeSort(int* arr, int start, int end) { if (start > end) return 0; if (start == end) return 0; if (start == end - 1) { if (arr[start] <= arr[end]) return 0; else swap(arr[start], arr[end]); return 1; } int mid = (start + end) / 2; int* LArr = new int[mid + 1]; int* RArr = new int[end - mid]; int i; for (i = start; i <= mid; i++) LArr[i] = arr[i]; for (i = mid + 1; i <= end; i++) RArr[i - (mid + 1)] = arr[i]; int count = 0; count += mergeSort(LArr, 0, mid); count += mergeSort(RArr, 0, end - mid - 1); count += merge(arr, LArr, RArr, mid + 1, end - mid); delete[] LArr; delete[] RArr; return count; } int main() { int t, n,*arr; cin >> t; while (t--) { cin >> n; arr = new int[n]; for (int i = 0; i < n; i++) cin >> arr[i]; cout << mergeSort(arr, 0, n - 1) << endl; } } 

Source: https://habr.com/ru/post/id477460/


All Articles