Trang chủ Tin Học Lớp 9 Trong giờ ra chơi, nhóm gồm `n` bạn học sinh...

Trong giờ ra chơi, nhóm gồm `n` bạn học sinh rủ nhau chơi nhảy dây. Trong mỗi lượt chơi sẽ có hai bạn được chọn để quăng dây, và một bạn được chọn để nhảy dây.

Câu hỏi :

Trong giờ ra chơi, nhóm gồm `n` bạn học sinh rủ nhau chơi nhảy dây. Trong mỗi lượt chơi sẽ có hai bạn được chọn để quăng dây, và một bạn được chọn để nhảy dây. Hai bạn quăng dây sẽ cầm hai đầu sợi dây, một bạn quăng dây theo chiều kim đồng hồ, và bạn còn lại quăng ngược chiều kim đồng hồ, để dây liên tục chạm đất và quăng qua đầu người nhảy. Người nhảy phải đứng giữa hai người quăng và phải nhảy khi dây chạm đất. Nếu như dây chạm vào chân bạn nhảy, bạn nhảy sẽ thua cuộc. Tất cả `n` bạn đều rất khỏe mạnh và năng động, nên các bạn có độ dẻo dai lần lượt là `c1,c2,...,cn`. Nếu như bạn thứ `i` được chọn làm bạn nhảy dây, trong giây bạn ấy sẽ đứng ở trên mặt đất, sau đó bạn ấy nhảy và trong `c_i` giây tiếp theo chân bạn ấy không chạm đất, và quá trình này sẽ lặp lại. Ví dụ, nếu `c_i = 3`: `@` Tại giây `1,2,3` chân bạn ấy chạm đất `@` Tại giây `4,5,6` chân bạn ấy không chạm đất `.....` Nếu như bạn thứ `u` và `v` được chọn làm hai bạn cầm dây, dây mà hai bạn quăng sẽ chạm đất vào các thời điểm là bội của `gcd(c_u, c_v)`, trong đó `gcd(x,y)` được định nghĩa là ước chung lớn nhất của hai số nguyên `x` và `y`. Ví dụ, với `c_u=6` và `c_v=8`, `gcd(6,8)=2`, nên dây mà hai bạn này quăng sẽ chạm đất tại các giây `2,4,6,8,10, ...` Cho danh sách độ dẻo dai của `n` bạn. Với bạn thứ `i`, hãy đếm xem có bao nhiêu cặp bạn quăng dây `u` và `v` (u<v), sao cho nếu như bạn thứ `i` là người nhảy dây, thì bạn này sẽ $\text{không bao giờ thua.}$ `INPUT` Dòng đầu tiên chứa số nguyên dương `n (3<=n<=10^6)` là số lượng bạn học sinh rủ nhau chơi nhảy dây. Dòng tiếp theo chứa `n` số nguyên `c_1,c_2,...,c_n (1<=c_i<=10^6)` lần lượt là độ dẻo dai của `n` bạn học sinh. `OUTPUT` In ra `n` số nguyên. Số thứ `i` cần in ra là là số lượng cặp bạn học sinh có thể chọn làm bạn quăng dây sao cho nếu `i` được chọn làm bạn nhảy dây thì bạn này sẽ không bao giờ thua.

image

Lời giải 1 :

#include <iostream>
#include <vector>
using namespace std;

#define long long long
const long Lim = 1e6;
long cnt[Lim + 5], ans[Lim + 5], n;
vector<int> a;

long f(long x) {
    return x * (x - 1) / 2;
}

void read() {
    cin >> n;
    a = vector<int>(n);
    for (int &x: a) cin >> x, cnt[x] += 1;
}

void precalc() {
    for (long i = 1; i <= Lim; ++i) {
        for (int k = i*2, j = k; j <= Lim; j += k) ans[i] += cnt[j];
        ans[i] = f(ans[i]);
    }
}

void print() {
    for (int x: a) cout << ans[x] << " ";
}

int main() {
    // Dễ này mà tối qua không nghĩ ra ;~;
    read();
    precalc();
    print();
}

Thảo luận

-- CJ wii báo trưởng nhóm hộ em là em bận công việc trên website nọ nên sẽ không onl ạ
-- ok, cơ mà a ko phải nữ ;~;
-- Zạ, hihi
-- cho hỏi là sao lại làm vậy, tại vẫn chưa hiểu thuật toán ý ạ
-- Giả sử: a[i], a[j], a[k] là độ dẻo dai của 3 người, trong đó: i, j là 2 người cầm dây; k là người nhảy Và để k không thua thì gcd(a[i], a[j]) chia hết cho 2*a[k] (Cái này chắc dễ biết rồi :))) Mà do gcd(a[i], a[j]) % 2*a[k] == 0 nên - a[i] % 2*a[k] =... xem thêm
-- tk

Bạn có biết?

Tin học, tiếng Anh: informatics, tiếng Pháp: informatique, là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng (ảo). Với cách hiểu hiện nay, tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin.

Nguồn : Wikipedia - Bách khoa toàn thư

Tâm sự 9

Lớp 9 - Là năm cuối ở cấp trung học cơ sở, sắp phải bước vào một kì thi căng thẳng và sắp chia tay bạn bè, thầy cô và cả kì vọng của phụ huynh ngày càng lớn mang tên "Lên cấp 3". Thật là áp lực nhưng các em hãy cứ tự tin vào bản thân là sẻ vượt qua nhé!

Nguồn : ADMIN :))

Copyright © 2021 HOCTAP247