Gửi bài giải
Điểm:
1,00 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift
Kỳ thi học sinh giỏi khối ~10~ môn Tin học năm nay có ~n~ học sinh tham gia với tổng điểm của các học sinh lần lượt là các số tự nhiên ~d_1, d_2, …, d_n~. BTC quyết định chọn các học sinh để trao giải theo nguyên tắc sau: Đầu tiên chọn ~[\frac{n}{2}]~ (phần nguyên của ~\frac{n}{2}~) số học sinh có điểm từ cao xuống thấp, sau đó chọn thêm những học sinh bằng điểm với học sinh có điểm thấp nhất trong số này. Em hãy giúp BTC tính số lượng học sinh có giải.
Input
- Dòng đầu chứa số nguyên dương ~n~;
- Dòng thứ hai chứa ~n~ số tự nhiên ~d_1, d_2, …, d_n~.Hai số liên tiếp trên một dòng được ghi cách nhau một dấu cách.
Giới hạn:
- ~2 ≤ n ≤ 10^5; 0 ≤ d_i ≤ 10^6~.
Output
- Một số nguyên duy nhất là số học sinh có giải.
Sample
Input #1
5
98 97 100 98 98
Output #1
4
Hint
Xem xét #1:
- ~[\frac{n}{2}] = [\frac{5}{2}] = 2~. Hai học sinh được chọn có điểm từ cao xuống thấp là ~100~ và ~98~, tiếp theo, còn ~2~ học sinh cùng đạt ~98~ điểm nữa cũng được chọn. Vậy có ~4~ học sinh có giải.
Problem source: Chuyên Sơn La Online Judge
Bình luận
lần đầu post code này full nhé
include<bits/stdc++.h>
define ll long long
define ed '\n'
using namespace std; int main() { ll n; cin>>n; vector<ll> a(n); unordered_map<ll,ll> m; for(ll i=0;i<n;i++) { cin>>a[i]; m[a[i]]++; } sort(a.begin(),a.end(),greater<ll>()); ll e=n/2; for(ll i=0;i<e;i++) { m[a[i]]--; } e+=m[a[n/2-1]]; cout<<e; }
include <bits/stdc++.h>
define el "\n"
using namespace std; using ll = long long;
void TienDat(){ int k; cin >> k; map<int , int , greater<int>> freq; for (int i = 0; i < k ; ++i){ int x; cin >> x; freq[x]++; } int g = k / 2; int dem = 0; for (auto &[key , value] : freq){ if (dem <= g) dem += value; } cout << dem << el; }
int main(){ iosbase::syncwith_stdio(0); cin.tie(0);
} sai đâu ạ
đr test 2 là gì vậy