Trò chơi
Xem dạng PDF
Gửi bài giải
Điểm:
0,01 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Input:
TROCHOI.INP
Output:
TROCHOI.OUT
Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch
Một công ty có tổ chức trò chơi, tặng ~N~ gói quà đã được chuẩn bị theo giá trị phần quà từ thấp đến cao, để tri ân cho ~N~ khách hàng. Công ty đó đã chuẩn bị 1 chiếc hộp đựng ~N~ mảnh giấy, mỗi mảnh giấy được bí mật ghi một mã hóa gồm nhiều kí tự số và chữ. Mỗi khách hàng được chọn ~1~ mảnh giấy trong chiếc hộp đó. Em hãy viết chương trình tặng quà từ thấp đến cao theo số lượng các kí tự số của mã hóa trong tờ giấy, nếu số lượng kí tự số trong mã hóa bằng nhau thì khách hàng chọn trước được quà trước.
Input
Vào từ file TROCHOI.INP có cấu trúc như sau:
Dòng đầu tiên chứa số nguyên dương ~N~ với (~0 < N \le 10^4~)
~N~ dòng tiếp theo, mỗi dòng chứa một mã hóa không dài quá ~255~ kí tự tương ứng cho từng khách hàng.
Output
Ghi ra file TROCHOI.OUT gồm:
- Thứ tự tặng quà của trò chơi này cho ~N~ khách hàng trên.
Sample Input 1
5
N123456Cao
A89Dat
G2Chuc
L512Ket
E3689Qua
Sample Output 1
G2Chuc
A89Dat
L512Ket
E3689Qua
N123456Cao

Bình luận
lo pls code full
sao nộp lại full WA nhỉ
include <bits/stdc++.h>
using namespace std; long long n; string s; pair <long long,string> pa[10005]; long long socs(string s) { long long kq=0; for (char c:s) { if (isdigit(c)) kq++; } return kq; } int main() { freopen("TROCHOI.INP","r",stdin); freopen("TROCHOI.OUT","w",stdout); iosbase::syncwithstdio(0); cin.tie(0); cout.tie(0); cin>>n; for (long long i=1;i<=n;++i) { cin>>s; pa[i]=makepair(socs(s),s); } sort (pa+1,pa+1+n); for (long long i=1;i<=n;++i) { cout<<pa[i].second<< "\n"; } }
include <bits/stdc++.h>
using namespace std; bool cmpnum (string a, string b){ int Counta = 0; int Countb = 0; for (int i = 0; i < a.size(); i++){ if (a[i] >= '0' && a[i] <= '9'){ Counta++; } } for (int i = 0; i < b.size(); i++){ if (b[i] >= '0' && b[i] <= '9'){ Countb++; } } if (Counta != Countb) return Counta < Countb; return false; } int main() { int n; freopen ("TROCHOI.INP", "r", stdin); freopen ("TROCHOI.OUT", "w", stdout); cin >> n; string mang[n];
}
mn giải thích giúp e vì sao code e sai đc không ạ
cho toi hoi la cach bai nay sap xep la sap xep kieu gi vay mn ? y toi la , toi dung sort thi no noi ket qua sai hoac dung nhung khong theo yeu cau cua bai ay mn.
uhm code?
include <bits/stdc++.h>
using namespace std;
bool cmp(const string& a, const string& b) { int ad = 0, bd = 0; for (auto i : a) if (isdigit(i)) ad++; for (auto i : b) if (isdigit(i)) bd++; return (ad<bd); }
int main() { freopen("TROCHOI.inp","r",stdin); freopen("TROCHOI.out","w",stdout); int n; cin>>n; vector<string> a(n); for (int i = 0; i < n; i++) cin>>a[i]; stable_sort(a.begin(),a.end(),cmp); for (auto i : a) cout<<i<<endl; }
SPOILER
có thể dùng hàm
isdigittrong thư viện<cctype>để kiểm tra xem một kí tự (char)có phải số hay không. cú phápdùng hàm
stable_sorttrong thư viện<algorithm>để có thể sắp xếp mà vẫn giữ thứ tự ( tức là nếu bằng nhau thì chuỗi nào xuất hiện trước sẽ được ưu tiên đứng trước). Cú pháp cơ bản củastable_sortlàtrong đó thì chúng ta có thể tự code một hàm so sánh riêng để đáp ứng đề bài. Lưu ý hàm phải trả về kiểu
bool, tham số phải là 2 phần tửví dụ như
hàm này khi được truyền vào
stable_sortsẽ sắp xếp mảng theo thứ tự lớn đến bé. Tức là khi hàm trả vềtrue, a sẽ đứng trước b và ngược lại.Tổng hợp lại những gì vừa nãy, chúng ta có thể giải bài này bằng cách tạo một
vectorlưu các giá trị ,tiếp theo tạo một hàm so sánh để so sánh số lượng kí tự là số trong hai chuỗi a và b, rồi truyền hàm này vàostable_sort, sau đó in ra kết quả.Một lưu ý nữa, với bài này không nên dùng hàm
sorttrong thư viện<algorithm>vì hàm này không giữ nguyên thứ tự đối với các phần tử trùng