---
tags:
title:
author: CppCodingClub
license: Public Use
---
:::info
:::spoiler Table of contents
[TOC]
:::
# Way Too Long Words
## Dịch đề
Đôi khi một số từ như `bản địa hóa` hay `quốc tế hóa` dài đến mức viết chúng nhiều lần trong một văn bản khá mệt mỏi.
Hãy xem xét một từ quá dài , nếu độ dài của nó lớn hơn 10 ký tự. Tất cả các từ quá dài nên được thay thế bằng một từ viết tắt đặc biệt.
Chữ viết tắt này được thực hiện như thế này: chúng ta viết chữ cái đầu tiên và chữ cái cuối cùng của một từ và giữa chúng chúng ta viết số chữ cái giữa chữ cái đầu tiên và chữ cái cuối cùng. Số đó thuộc hệ thập phân và không chứa bất kỳ số 0 đứng đầu nào.
Vì vậy, `localization` sẽ được viết là `l10n`, và `internationalization` sẽ được viết là `i18n`.
Bạn được đề xuất tự động hóa quá trình thay đổi các từ bằng chữ viết tắt. Khi đó, tất cả các từ quá dài sẽ được thay thế bằng chữ viết tắt và các từ không quá dài sẽ không bị thay đổi.
---
### I.a Đầu vào
Dòng đầu tiên chứa một số nguyên `n` $( 1 ≤ n ≤ 100 )$. Mỗi dòng trong n dòng sau chứa một từ. Tất cả các từ đều bao gồm các chữ cái Latin thường và có độ dài từ 1 đến 100 ký tự.
### I.b Đầu ra
In n dòng. Dòng thứ i phải chứa kết quả của việc thay thế từ thứ i từ dữ liệu đầu vào.
### I.c Ví dụ
**Đầu vào:**
>4
word
localization
internationalization
pneumonoultramicroscopicsilicovolcanoconiosis
**Đầu ra:**
> word
l10n
i18n
p43s
## II. Các trường hợp:
a) $word length <= 10$, thì kết quả vẫn là từ đó và số lượng output = số n được yêu cầu
b) $word length > 10$, thì kết quả là chữ đầu + số lượng chữ ở giữa + chữ cuối và số lượng output = số n được yêu cầu
c) Số lượng output được quyết định theo số n được đưa vào ban đầu
## III Phương án giải quyết:
- Với đầu vào $n = 2$, chúng ta sẽ được cho 2 input.
Với đầu vào $n = 4$, chúng ta sẽ được cho 4 input.
- Với đầu vào là trong các input, input nào chưa có số lượng chữ lớn hơn `10` thì in ra chữ cái đầu + số lượng chữ cái ở phần thân + chữ cái cuối.
Với đầu vào là trong các input, input nào chưa có số lượng chữ nhỏ hơn hoặc = `10` thì in ra như ban đầu.
### III.a Điều kiện:
- Chiều dài của input lớn hơn 10
- Input là string ngoại trừ n
### III.b Mã giả
```yaml!
Hàm shorten (Nhập tham chiếu của string)
Thay thế từ phần tử 1 tới (chiều dài của string - 1) bằng số lượng phần tử ở giữa string
trả lại string
Nhập(n)
lặp lại theo n
Nhập(string)
nếu string > 10
xuất output của hàm shorten
còn lại
xuất string ban đầu
```
### III.c Lời giải:
#### 1. Cách giải 1 (gọn nhất)
```cpp=
#include <iostream>
using namespace std;
string shorten(string &n){ // hàm để rút gọn chữ
return n.replace(n.begin() + 1, n.end() - 1, to_string(n.length() - 2));
}
int main(){
int n; // số lượng input
cin >> n;
for (int i = 0; i < n; i++){ // output string đã được rút gọn theo số lượng input
string s;
cin >> s;
if(s.length() > 10){
cout << shorten(s) << endl;
}
else{
cout << s << endl;
}
}
}
```
#### 2.Cách giải 2 (tự lực cánh sinh, không dùng hàm có sẵn và thư viện)
```cpp=
#include <iostream>
#include <vector>
using namespace std;
string shorten(string &n){ // hàm để rút gọn chữ
return n.replace(n.begin() + 1, n.end() - 1, to_string(n.length() - 2));
}
int main(){
int n; // số lượng input
vector<string> shortened;
cin >> n;
for (int i = 0; i < n; i++){ // output string đã được rút gọn theo số lượng input
string s;
cin >> s;
if(s.length() > 10){
shortened.push_back(shorten(s));
}
else{
shortened.push_back(s);
}
}
cout << "\n";
for (string element : shortened)
{
cout << element << endl;
}
}
```
# Team
## Dịch đề
Một ngày nọ, ba người bạn thân Petya, Vasya và Tonya quyết định thành lập một nhóm và tham gia các cuộc thi lập trình. Những người tham gia thường được đưa ra một số vấn đề trong các cuộc thi lập trình. Rất lâu trước khi bắt đầu, những người bạn đã quyết định rằng họ sẽ thực hiện một bài toán nếu có ít nhất hai người trong số họ chắc chắn về lời giải. Nếu không, bạn bè sẽ không viết lời giải của vấn đề.
Cuộc thi này đưa ra `n` vấn đề cho người tham gia. Đối với mỗi vấn đề chúng ta biết, người bạn nào chắc chắn về giải pháp. Giúp bạn bè tìm ra số lượng vấn đề mà họ sẽ viết ra cách giải quyết.
---
### I.a Đầu vào
Dòng đầu tiên chứa một số nguyên `n` $(1 <= n <= 1000)$ — số lượng câu hỏi trong cuộc thi. Khi đó `n` dòng chứa ba số nguyên, mỗi số nguyên là `0` hoặc `1`. Nếu số đầu tiên trong dòng bằng `1` thì Petya chắc chắn về lời giải của bài toán, nếu không thì anh ấy không chắc chắn. Con số thứ hai thể hiện quan điểm của Vasya về giải pháp, con số thứ ba thể hiện quan điểm của Tonya. Các số trên dòng cách nhau bởi dấu cách.
### I.b Đầu ra
In ra một số nguyên duy nhất — số bài toán mà bạn bè sẽ thực hiện trong cuộc thi.
### I.c Ví dụ
**Đầu vào:**
>3
1 1 0
1 1 1
1 0 0
> 2
**Đầu ra:**
> 2
1 0 0
0 1 1
> 1
### I.d Ghi chú
Trong mẫu đầu tiên, Petya và Vasya chắc chắn rằng họ biết cách giải quyết vấn đề đầu tiên và cả ba người họ đều biết cách giải quyết vấn đề thứ hai. Điều đó có nghĩa là họ sẽ viết giải pháp cho những vấn đề này. Chỉ có Petya là chắc chắn về giải pháp cho vấn đề thứ ba, nhưng như vậy vẫn chưa đủ nên bạn bè sẽ không thực hiện.
Trong mẫu thứ hai, những người bạn sẽ chỉ thực hiện vấn đề thứ hai vì Vasya và Tonya chắc chắn về giải pháp.
## II. Các trường hợp:
- Rất nhiều
## III Phương án giải quyết:
- Kiểm tra tổng của mỗi dòng có lớn hơn hoặc bằng 2 không
- Nếu tổng của số nhập vào mỗi dòng lớn hơn hoặc bằng 2 thì +1 vào bài giải được
### III.a Điều kiện:
- Phải có ít nhất 2 người biết cách giải
### III.b Mã giả
```yaml!
Nhập(n)
khai báo số lượng bài giải được = 0
lặp lại theo n
Nhập(a,b,c)
nếu tổng a,b,c lớn hơn hoặc bằng 2
+1 vào số lượng bài giải được
in số lượng bài giải được
```
### III.c Lời giải:
```cpp=
#include <iostream>
using namespace std;
int main() {
int n, count = 0;
cin >> n;
for (int i = 0; i < n; i++) {
int petya, vasya, tonya;
cin >> petya >> vasya >> tonya;
if (petya + vasya + tonya >= 2) {
count++;
}
}
cout << count << endl;
return 0;
}
```