SERTIFIKAT
Pak Dengklek berencana memberikan penghargaan kepada siswanya yang memilik nilai terbaik dalam kelas yang diajarkannya. Untuk menentukan siapa saja yang akan mendapatkan sertifikat, pertama Pak Dengklek menentukan nilai maksimal dari siswa dalam kelas. Setiap siswa yang memiliki nilai sama dengan nilai maksimal dalam kelas maka akan mendapatkan penghargaan berupa sertifikat. Jika diketahui N nilai siswa, bantulah Pak Dengklek untuk menentukan berapa banyak sertifikat yang harus di cetak.
Format Masukan:
Masukan terdiri dari 2 baris. Baris pertama berisi bilangan bulat N. Bari kedua berisi N buah bilangan Ai, di mana Ai menyatakan nilai dari siswa ke-i yang dipisahkan dengan spasi.
Format Keluaran:
Banyaknya sertifikat yang harus dicetak oleh Pak Dengklek.
Batasan:
Contoh Masukan dan Keluaran:
| Contoh Masukan | Contoh Keluaran |
|
5 87 100 89 100 90 |
2 |
|
8 87 99 89 99 90 90 99 70 |
3 |
Cupu :(
Setelah kita observasi lebih lanjut, sebenarnya kita tinggal mencatat nilai tertingginya dan jumlah peserta yang mendapatnya saja, tidak penting untuk menyimpan nilai-nilai siswa yang tidak mendapat sertifikat.
#include <iostream>
using namespace std;
int N,A,Amax,ans;
//N merupakan jumlah murid (2 <= N <= 100000)
//A merupakan nilai murid (1 <= A <= 100)
//Amax merupakan nilai tertinggi seluruh murid saat ini
//ans merupakan jumlah murid yang memiliki nilai tertinggi saat ini
int main(){
cin >> N; //Input jumlah murid
for(int i = 1;i <= N;i++){ //Untuk setiap nilai
cin >> A; //Baca nilainya
if(A > Amax){ //Jika nilai sekarang lebih besar dari nilai tertinggi
Amax = A; //Catat nilai tertingginya
ans = 0; //Reset jumlah muridnya
}
if(A == Amax){ //Jika nilai sekarang sama dengan nilai maksimum
ans++; //Tambahkan jumlah muridnya
}
}
cout << ans << endl; //Output jumlah murid dengan nilai tertinggi
}
Tujuan soal di atas adalah menghitung banyaknya siswa yang memiliki nilai tertinggi. Contoh kode:
#include <iostream> //cin, cout, endl
#include <limits> //INT_MIN
using namespace std;
int main(){
int n;
cin >> n;
int nilai[n], tertinggi = INT_MIN;
for(int i = 0; i < n; i++){
cin >> nilai[i];
if(nilai[i] > tertinggi){
tertinggi = nilai[i];
}
}
int cnt = 0;
for(int i = 0; i < n; i++){
if(nilai[i] == tertinggi){
cnt++;
}
}
cout << cnt << endl;
}
Masuk untuk menulis jawaban
#include<bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,data[100001],ans=0;
multiset<int> m;
cin >> n;
for(int i=0;i<n;i++){
cin >> data[i];
m.insert(data[i]);
}
int mx = *max_element(data,data+n);
cout << m.count(mx) << "\n";
return 0;
}
simple and fast :) O(n)
tidak sepenuhnya benar, coba anda baca di: http://www.cplusplus.com/reference/set/multiset/count/
disana dijelaskan bahwa: "Logarithmic in size and linear in the number of matches."
jadi dalam number of matches, compleksitasnya linear atau O(n) sisanya O(log n)
Cupu :(
oalah AHAHAHAHHAH ini gw komen lagi mabok.
insert() di multiset kompleksitasnya log n
jadi bagian
for(int i=0;i<n;i++){
cin >> data[i];
m.insert(data[i]);
}
O(N log N) ga sih
Jika ingin mendownvote, jangan lupa juga untuk komen tentang kesalahannya. That'll be helpful for everyone, don't let that be a habit.
Yeah, yeah, whatever. Give me your code and I'll understand it. But that's not how you teach why an algorithm works.
Jika anda baca dan paham apa maksud dari deskripsi soalnya, masalahnya dapat diterjemahkan menjadi berapa banyak siswa yang memiliki nilai termaksimum pada kelas tersebut. Mari kita telusuri sebuah array yang misterius dalam rangkaian figur berikut:

Perhatikan bahwa penelusuran ini mengoutputkan array yang dilabeli dengan dua warna, dan banyaknya elemen yang diwarnai dengan warna jingga adalah elemen yang kita inginkan. Rutinitas yang sedang dilakukan yaitu:
1. Mulai dari kiri array. Set elemen tersebut sebagai elemen dengan nilai maksimum dan warnai dengan jingga.
2. Pindah ke elemen sebelahnya.
3. Jika sudah tidak elemen lagi, maka stop. Jika masih ada, lakukan step 2.
Algoritma ini selalu mengeluarkan output yang kita inginkan, yaitu banyaknya elemen yang dilabeli dengan warna jingga. Mengapa? Karena saat kita pertama kali menemukan elemen termaksimum (contohnya pada baris ketiga di gambar), yaitu , terdapat beberapa properti yang terjamin kebenarannya:
Maka dari itu, setiap kita melanjutkan pencarian, kita akan selalu melihat hanya nilai sebagai nilai termaksimum dan mewarnainya dengan jingga. Akhirnya rutinitas algoritma tersebut bisa kita konversikan ke dalam pseudocode berikut.

Siswa MAN 2 KUDUS
#include<bits/stdc++.h>
using namespace std;
int arr[100005];
int main(){
int N,max,ans=0;
cin>>N;
for (int i=0;i<=N;i++){
cin>>arr[i];
}
max=arr[0];
for (int i=0;i<N;i++){
if(arr[i]>max){
max=arr[i];
ans=1;
} else if (arr[i]==max){
ans++;
}
}
cout<<ans;
return 0;
}
var
N, count, i: longint;
currentNilai: integer;
maxNilai: integer;
begin
readln(N);
maxNilai := 0;
currentNilai := 0;
for i := 1 to N do begin
read(currentNilai);
if(currentNilai > maxNilai) then begin
maxNilai := currentNilai;
count := 1;
end else if(currentNilai = maxNilai) then begin
count += 1;
end;
end;
writeln(count);
end.
Kira-kira seperti itu dalam pascal
var N,i,x,y:longint; A:array[1..100] of longint; begin readln(N); for i:=1 to N do begin read(A[i]); end; x:=0; y:=0; for i:=1 to N do begin if (x<A[i]) then begin x:=A[i]; y:=0; end; if x=A[i] then begin y:=y+1; end; end; writeln(y); end.
#include <iostream>
using namespace std;
int main(){
int N,maks=0,i,cnt;
cin>>N;
int A[N];
for(i=0;i<N;i++){
cin>>A[i];
if(A[i]>maks){
maks=A[i];
cnt=1;
}
else if(A[i]==maks) cnt++;
}
cout<<cnt<<endl;
return 0;
}
-- lua l1,l2,x,y = io.read(),io.read(),0,0 for i in string.gmatch(l2, "%S+") do i = tonumber(i) y = i > x and 0 or y x = i > x and i or x y = i == x and y + 1 or y end print(y)
// C#
using System;
class MainClass {
public static void Main (string[] args) {
int l1 = Convert.ToInt32(Console.ReadLine());
string[] l2 = Console.ReadLine().Split(" ");
int x=0;
int y=0;
foreach (string n in l2) {
int i = Convert.ToInt32(n);
y = (i > x) ? 0 : y;
x = (i > x) ? i : x;
y = (i == x) ? (y + 1) : y;
}
Console.WriteLine(y);
}
}
Cupu :(
hmm, sepertinya fungsi count() multiset tidak O(N)