Kuis (Style TLX) Rata-Rata -> Deskripsi Jessie adalah seorang siswa di suatu sekolah. Sekolah tersebut melakukan penilaian dengan tugas-tugas tertentu. Tugas ke-n memiliki pembobotan Pn. Jessie memiliki rata-rata X, yaitu rata-rata harapannya. Diketahui skor tugas-tugas Jessie sampai tugas ke-(n-1), yang dinotasikan sebagai Sn. Tentukan skor minimal Jessie pada tugas ke-n (dalam bentuk bilangan bulat) agar rata-rata Jessie tidak kurang dari X. Jika tidak mungkin, keluarkan -1. Format Masukan: Baris pertama berisi nilai X dan n. Baris kedua berisi pembobotan tugas ke-1 sampai tugas ke-(n-1). Baris ketiga berisi nilai tugas ke-1 sampai tugas ke-(n-1). Maka masukan akan berbentuk: X n P1 P2 P3 P4 .... P(n-1) S1 S2 S3 S4 .... S(n-1) Format Keluaran Sebuah baris berisi bilangan bulat Y yang merupakan jawaban dari pertanyaan. Bentuk keluaran: Y
(X × P1 + X × P2 + X × P3 + ... + X × Pn) - (S1 × P1 + S2 × P2 + S3 × P3 + ... + Sn-1 × Pn-1) ≤ Y × Pn
Dari sini, kita dapat mencari nilai minimal dari Y yang memenuhi persamaan di atas:
Y = ((X × P1 + X × P2 + X × P3 + ... + X × Pn) - (S1 × P1 + S2 × P2 + S3 × P3 + ... + Sn-1 × Pn-1)) / Pn
Jika hasil dari persamaan di atas lebih kecil dari atau sama dengan 100 dan lebih besar dari atau sama dengan 0, maka outputkan hasilnya. Jika tidak, outputkan -1.
Berikut adalah implementasi dari algoritma di atas:
x, n = map(int, input().split())
p = list(map(float, input().split()))
s = list(map(int, input().split()))
total_weight = sum(p)
s_sum = sum(s[:-1])
y = (x * total_weight - s_sum) / p[-1]
if y >= 0 and y <= 100:
print(int(round(y)))
else:
print(-1)
Penjelasan kode di atas:
Pertama, kita membaca masukan nilai X dan n.
Kemudian, kita membaca masukan pembobotan tugas ke-1 sampai ke-(n-1) dan nilai tugas ke-1 sampai ke-(n-1).
Setelah itu, kita menghitung jumlah total pembobotan dan jumlah nilai tugas-tugas sampai tugas ke-(n-1).
Selanjutnya, kita mencari nilai minimal dari tugas ke-n menggunakan rumus di atas.
Jika nilai yang ditemukan berada di antara 0 dan 100, kita outputkan nilainya (setelah dibulatkan ke bilangan bulat terdekat). Jika tidak, kita outputkan -1.
Solusi:
Untuk menyelesaikan permasalahan ini, kita perlu menggunakan rumus rata-rata:
X = (S1 × P1 + S2 × P2 + S3 × P3 + ... + Sn-1 × Pn-1 + Sn × Pn) / (P1 + P2 + P3 + ... + Pn)
Kita juga tahu bahwa nilai minimal dari Sk (1 ≤ k ≤ n-1) adalah 0 dan nilai minimal dari Sn adalah Y (nilai yang ingin kita cari).
Maka rumus di atas dapat kita ubah menjadi:
X ≤ (S1 × P1 + S2 × P2 + S3 × P3 + ... + Sn-1 × Pn-1 + Y × Pn) / (P1 + P2 + P3 + ... + Pn)
X × (P1 + P2 + P3 + ... + Pn) ≤ (S1 × P1 + S2 × P2 + S3 × P3 + ... + Sn-1 × Pn-1 + Y × Pn)
(X × P1 + X × P2 + X × P3 + ... + X × Pn) - (S1 × P1 + S2 × P2 + S3 × P3 + ... + Sn-1 × Pn-1) ≤ Y × Pn
Dari sini, kita dapat mencari nilai minimal dari Y yang memenuhi persamaan di atas:
Y = ((X × P1 + X × P2 + X × P3 + ... + X × Pn) - (S1 × P1 + S2 × P2 + S3 × P3 + ... + Sn-1 × Pn-1)) / Pn
Jika hasil dari persamaan di atas lebih kecil dari atau sama dengan 100 dan lebih besar dari atau sama dengan 0, maka outputkan hasilnya. Jika tidak, outputkan -1.
Berikut adalah implementasi dari algoritma di atas:
x, n = map(int, input().split())
p = list(map(float, input().split()))
s = list(map(int, input().split()))
total_weight = sum(p)
s_sum = sum(s[:-1])
y = (x * total_weight - s_sum) / p[-1]
if y >= 0 and y <= 100:
print(int(round(y)))
else:
print(-1)
Penjelasan kode di atas:
Pertama, kita membaca masukan nilai X dan n.
Kemudian, kita membaca masukan pembobotan tugas ke-1 sampai ke-(n-1) dan nilai tugas ke-1 sampai ke-(n-1).
Setelah itu, kita menghitung jumlah total pembobotan dan jumlah nilai tugas-tugas sampai tugas ke-(n-1).
Selanjutnya, kita mencari nilai minimal dari tugas ke-n menggunakan rumus di atas.
Jika nilai yang ditemukan berada di antara 0 dan 100, kita outputkan nilainya (setelah dibulatkan ke bilangan bulat terdekat). Jika tidak, kita outputkan -1.
Demikianlah solusi untuk permasalahan ini.