Lời Giải HSG Tin Tỉnh Quảng Ninh (B) - 2015
Bài 1. CONTAINER
Hãng vận tải hàng hoá nhận được đơn đặt hàng vận chuyển hai thùng hàng dễ vỡ. Để đảm bảo an toàn, hãng quyết định dùng container hiện có vận chuyển.
Các thùng hàng có hình khối hộp chữ nhật, với các chiều dài, rộng, cao tương ứng là và . Container cũng có hình khối hộp chữ nhật kích thước .
Các thùng hàng phải được xếp vào Container để có thể dễ dàng chèn chặt. Các thùng hàng được xoay theo trục đứng một góc là bội của . Hai thùng hàng có thể để cạnh nhau hoặc nằm trước/sau, không được đè lên nhau. Đương nhiên, các thùng hàng phải nằm gọn trong Container.
Yêu cầu
Hãy xác định, có thể đóng các thùng hàng vào Container hay không.
Dữ liệu
Vào từ tệp văn bản CONTAINE.INP:
- Dòng thứ nhất chứa 3 số nguyên dương .
- Dòng thứ hai chứa 3 số nguyên dương .
- Dòng thứ ba chứa 3 số nguyên dương .
Kết quả
Đưa ra file văn bản CONTAINE.OUT thông báo hoặc .
Ví dụ
| CONTAINE.INP | CONTAINE.OUT |
|---|---|
| 2 3 4 3 5 4 5 5 4 | YES |
| 3 2 2 3 1 2 5 2 3 | NO |
Lời giải
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define nl '\n'
ll l1,w1,h1;
ll l2,w2,h2;
ll lc,wc,hc;
bool check(ll l, ll w){
return (l <= lc && w <= wc) || (l <= wc && w <= lc);
}
string solve(){
cin>>l1>>w1>>h1>>l2>>w2>>h2>>lc>>wc>>hc;
if (h1 > hc || h2 > hc) return "NO";
if (check(l1+l2,max(w1,w2)) ||
check(w1+w2,max(l1,l2)) ||
check(l1+w2,max(l2,w1)) ||
check(l2+w1,max(l1,w2))
) return "YES";
return "NO";
}
int main()
{
cout << solve();
return 0;
}Bài 2. Giải nén xâu GNEN
Trong máy tính, để tiết kiệm bộ nhớ, người ta thường tìm cách nén dữ liệu. Trong việc nén văn bản, ta sử dụng một phương pháp đơn giản được mô tả thông qua ví dụ sau:
Ví dụ:
- Với xâu kí tự sẽ được nén lại thành xâu .
- Với xâu kí tự sẽ được nén lại thành xâu .
Cho một xâu kí tự gồm các kí tự thuộc tập .
Gọi là xâu nén của xâu theo phương pháp được mô tả như trên.
Xâu gồm kí tự thuộc tập các kí tự: .
Yêu cầu
Hãy giải nén xâu để được xâu gốc .
Dữ liệu
Vào từ file văn bản GNEN.INP gồm đúng một dòng chứa xâu kí tự .
Kết quả
Đưa ra file GNEN.OUT gồm duy nhất một dòng chứa xâu là xâu sau khi đã được giải nén.
Ví dụ
| GNEN.INP | GNEN.OUT |
|---|---|
| 3a5bc | aaabbbbbc |
Lời giải
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define nl '\n'
int main()
{
string s; cin >> s;
for (int i=0;i<s.size();i++){
if ('a' <= s[i] && s[i] <= 'z'){
int j=i-1;
string snum = "";
while (j>=0 && '0' <= s[j] && s[j] <= '9'){
snum += s[j--];
}
ll num = 0;
if (snum=="") num=1;
else{
for (int j=snum.size()-1;j>=0;j--){
num = num*10 + (int)snum[j]-48;
}
}
cout << string(num, s[i]);
}
}
return 0;
}Bài 3. Thu nhập gấp đôi
Một đơn vị thống kê trong khi điều tra về tổng thu nhập của các hộ dân (có thu nhập thấp) ở địa phương được giao phụ trách, kết quả được ghi lại dưới dạng một dãy số gồm số nguyên dương . Trong đó là tổng thu nhập của hộ thứ .
Dựa vào kết quả dãy số này, đơn vị đó muốn biết số hộ có tổng thu nhập gấp đôi thu nhập của một hộ khác trong số hộ đã được điều tra.
Ví dụ: Với dãy thì sẽ có 3 hộ như vậy.
Yêu cầu
Bạn hãy giúp đơn vị thống kê đó xác định số - số hộ có tổng thu nhập như vậy và số - tổng thu nhập thấp nhất so với tổng thu nhập của những hộ trong số các hộ này.
Dữ liệu
Vào từ file văn bản GAPDOI.INP:
- Dòng đầu tiên chứa số tự nhiên .
- Dòng thứ trong dòng tiếp theo mỗi dòng chứa một số nguyên dương .
Kết quả
Ghi ra file văn bản GAPDOI.OUT: gồm 2 số tự nhiên viết cách nhau trên một dòng (Trong đó là số hộ có tổng thu nhập gấp đôi tổng thu nhập của một hộ khác trong số những hộ được điều tra và là tổng thu nhập thấp nhất so với tổng nhu nhập của hộ này).
Ví dụ
| GAPDOI.INP | GAPDOI.OUT |
|---|---|
| 8 300 800 1200 600 500 400 1200 700 | 4 600 |
Lời giải
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define nl '\n'
int main()
{
int n; cin >> n;
int a[n];
bool marked[32005];
for (int i=0;i<n;i++) cin >> a[i];
memset(marked, 0, sizeof(marked));
sort(a, a + n);
int cnt = 0, mn = 1e9;
for (int i=0;i<n;i++){
if (!(a[i]&1) && marked[a[i]/2]){
cnt++;
mn = min(mn, a[i]);
}
marked[a[i]] = 1;
}
cout << cnt << " " << mn;
return 0;
}