fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <map>
  5.  
  6. // Struktur data untuk Pendonor
  7. struct Donor {
  8. int desa;
  9. std::string golongan;
  10. int volume;
  11. };
  12.  
  13. void hitung_pendonor_per_desa() {
  14. // Optimasi I/O
  15. std::ios_base::sync_with_stdio(false);
  16. std::cin.tie(NULL);
  17.  
  18. int N, M;
  19.  
  20. // Baris 1: Membaca N (Jumlah DDS, maks 1000)
  21. if (!(std::cin >> N)) return;
  22.  
  23. // Baris 2: Membaca M (Jumlah Desa, maks 10)
  24. if (!(std::cin >> M)) return;
  25.  
  26. // Map untuk menghitung jumlah pendonor per desa.
  27. // Key: Kode Desa (int), Value: Jumlah Pendonor (int)
  28. std::map<int, int> jumlah_per_desa;
  29.  
  30. // N baris berikutnya: Membaca data setiap pendonor
  31. for (int i = 0; i < N; ++i) {
  32. Donor d;
  33.  
  34. // Membaca Kode Desa, Golongan Darah, Volume Darah
  35. if (!(std::cin >> d.desa >> d.golongan >> d.volume)) break;
  36.  
  37. // Pengecekan Batas dan Validasi Data
  38. // Kode Desa harus antara 1 dan M
  39. // Volume Darah harus antara 0 dan 500
  40. if (d.desa >= 1 && d.desa <= M && d.volume >= 0 && d.volume <= 500) {
  41. // Jika data valid, tambahkan hitungan untuk desa tersebut
  42. jumlah_per_desa[d.desa]++;
  43. }
  44. // Data yang tidak valid akan diabaikan
  45. }
  46.  
  47. // --- Menampilkan Hasil Keluaran Sesuai Permintaan ---
  48. bool pertama = true;
  49. for (int i = 1; i <= M; ++i) {
  50. // Ambil jumlah pendonor. Gunakan 0 jika desa tidak ada di map (tidak ada pendonor)
  51. int hitungan = jumlah_per_desa.count(i) ? jumlah_per_desa[i] : 0;
  52.  
  53. // Cek apakah output perlu dipisahkan dengan spasi
  54. if (!pertama) {
  55. std::cout << " ";
  56. }
  57.  
  58. // Cetak format: Desa KODE:JUMLAH
  59. std::cout << "Desa " << i << ":" << hitungan;
  60.  
  61. pertama = false;
  62. }
  63. std::cout << std::endl; // Pindah baris di akhir
  64. }
  65.  
  66. int main() {
  67. std::cout << "Masukkan N, M, diikuti N baris data (KodeDesa GolonganDarah Volume):\n";
  68. // Contoh Input: 8 3 1 A 250 2 O 300 1 B 500 3 AB 400 1 O 200 2 A 350 3 B 450 3 O 200
  69.  
  70. hitung_pendonor_per_desa();
  71.  
  72. return 0;
  73. }
Success #stdin #stdout 0.01s 5304KB
stdin
8
3
3 1 150
1 2 250
3 1 300
1 3 450
2 2 200
3 4 350
1 4 500
2 1 500
stdout
Masukkan N, M, diikuti N baris data (KodeDesa GolonganDarah Volume):
Desa 1:3 Desa 2:2 Desa 3:3