Asosiy qismga o'tish

~/algor $ cat masalalar/algor-bot-va-xabarlar

ALGOR Bot va Xabarlar

I Muallif: Iqbolshoh Ilhomjonov
Oson 1000 ms 256 MB Urinishlar
Ulashish
Mavzular: Matematika

Iqbolshoh ALGOR platformasi dasturchilari uchun yangi Telegram bot tizimini ishga tushirmoqda.

Telegram cheklovlariga ko'ra, bot orqali bitta xabarda ko'pi bilan K ta belgi yuborish mumkin. Agar yuborilishi kerak bo'lgan matn uzunligi K dan ortiq bo'lsa, bot uni ketma-ket bir nechta paketlarga ajratib jo'natadi.

Masalan, agar umumiy xabar uzunligi N = 10 ta belgi, har bir paket sig'imi esa K = 3 ta belgi bo'lsa:

  • 1-paket: 3 ta belgi;
  • 2-paket: 3 ta belgi;
  • 3-paket: 3 ta belgi;
  • 4-paket (oxirgi paket): 1 ta belgi.
    Jami 4 ta paket jo'natiladi va oxirgi paketda 1 ta belgi bo'ladi.

Agar N = 15 va K = 5 bo'lsa, jami 3 ta paket yuboriladi va oxirgi paketda to'liq 5 ta belgi bo'ladi.

Sizga umumiy belgilar soni N va bitta paket sig'imi K beriladi. Bot jami nechta paket yuborishini va eng so'nggi paketda nechta belgi bo'lishini aniqlang.

Kiruvchi ma'lumotlar

Yagona qatorda ikkita butun son: N va K ($1 \le N \le 10^{18}, 1 \le K \le 10^9$) kiritiladi.

Chiquvchi ma'lumotlar

Bitta qatorda probel bilan ajratilgan ikkita butun son: jami paketlar soni va eng oxirgi paketdagi belgilar sonini chiqaring.

Izoh

Eslatma: N qiymati $10^{18}$ gacha yetishi mumkin, shuning uchun 64-bitli butun son turlaridan (C++ da long long, Python da standart int) foydalaning.

Misollar

Kirish #1
10 3
Chiqish #1
4 1
Kirish #2
15 5
Chiqish #2
3 5
Kirish #3
1 5
Chiqish #3
1 1
Yechim tahlili

Avval o'zingiz yechib ko'ring — tahlilni o'qish o'rganishga yordam beradi, lekin javobni tayyor beradi.

### Masala tahlili (Problem A) Ushbu masalada umumiy belgilar soni N va bitta paket sig'imi K berilgan. 1. Jami paketlar soni: N ta belgini K tadan bo'laklarga ajratganda paketlar soni $\lceil N / K \rceil$ bo'ladi. Butun sonlar arifmetikasida buni (N + K - 1) / K formulasi bilan hisoblash mumkin. 2. Oxirgi paketdagi belgilar soni: - Agar N soni K ga qoldiqsiz bo'linsa (N % K == 0), oxirgi paket ham to'liq K ta belgidan iborat bo'ladi. - Aks holda, oxirgi paketda qoldiq miqdoridagi belgilar, ya'ni N % K ta belgi bo'ladi. $N \le 10^{18}$ bo'lganligi uchun C++ da long long turidan foydalanish shart. ```cpp #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); long long n, k; if (cin >> n >> k) { long long packets = (n + k - 1) / k; long long last = (n % k == 0) ? k : (n % k); cout

Yechim yuborish uchun tizimga kiring

Ro'yxatdan o'tish bepul va bir daqiqa oladi.