Cần giúp đỡ bước in ra kết quả của bài tập thao tác trên dãy số

Xét dãy số nguyên dương a1, a2,… an (a<=10^4) và hai thao tác trên dãy.

  1. Thao tác loại 0 với hai thông số i,x. Thao tác này sẽ thay đổi phần tử a; bằng số nguyên dương x (x< 10^4);

  2. Thao tác loại 1 với hai thông số L,R. Gọi P là tích các số từ L đến R, S là số ước số của P, thao tác này sẽ đưa ra phần dư trong phép chia S cho (10^9 +7).

Yêu cầu: Cho dãy số a, az, . an và q thao tác, với mỗi thao tác loại 1 hãy đưa ra tương ứng

Dữ liệu: Vào từ file văn bản DIV.INP có dang

  • Dòng đầu chứa số nguyên n;
  • Dòng thứ hai chứa n số nguyên dương a1, a2 … an
  • Dòng thứ ba chứa số nguyên q là số thao tác;
  • Tiếp theo là q dòng, mỗi dòng chứa ba số mô tả các thao tác. Cụ thể: nếu là thao tác loai 0 thì dòng gồm ba số 0, i,x; còn nếu là thao tác loại 1 thì dòng gồm ba số 1, L, R.

Kết quả: Ghi ra q dòng, mỗi dòng là 1 số tương ứng với kết quả cần đưa ra của các thao tác loại 1 theo thứ tự xuất hiện trong file dữ liệu

VD:

input output
4
1 2 3 4
3
1 3 4
0 4 1
1 1 4
6 4

Em có thể làm được thao tác 0 nhưng đến thao tác một và in ra kết quả em không biết làm ntn, mọi người có thể hướng dẫn e cách làm được không ạ, em cảm ơn trước.

Hi there,

  1. Thao tác 0 là thao tác gì thế cậu? Ý cậu là thao tác loại 0?
    Nếu đúng là vậy, cậu nên sửa lại câu của cậu cho rõ nghĩa.
  2. Cậu có thể đưa code của cậu lên được không?
  3. “Thao tác loại 0” có thông số i để làm gì?
  4. “Thao tác loại 1” cậu gặp vấn đề gì? Cậu không hề biết phép chia dư, hay cậu không biết cách viết code thế? :slight_smile:
    Cậu có thể nói rõ cậu đã thử giải quyết bài toán này như thế nào chưa? Tớ hi vọng cậu ít nhất cũng đã bỏ công ra thử làm.
    Nếu không, tớ e là không ai giúp được cậu đâu.

Hope it helps!

6 Likes

_thao tác loại 0 để đổi giá của phần tử ai thành số x;
mình chưa biết viết code của thao tác loại 1
Nếu có thể thì cậu giúp tớ với nhé :pray:

B1. Phân tích thừa số nguyên tố của từng số :slight_smile:
B2. Rồi lấy số mũ cộng với số mũ theo cơ số :smiley:
B3. Áp dụng quy tắc nhân tổ hợp.

6 Likes

Cậu học cấp 1 phải không? :slight_smile:
Cậu đã thử giải chưa?
@rogp10 có đề cập giải thuật cơ bản ở trên rồi. Cậu có gặp khó khăn gì khi cài đặt không?

4 Likes

mình không biết đoạn tính tích số tư l đến r kiểu gì nhé bạn, chứ không phải đoạn tìm số ước, bạn có thể xem vd trên dòng 6, dòng 5 với thao tác 0 đã đổi số 4 thành 1 rồi , thao tác 1 ở dòng 6 lại bắt tính tích từ 1->4 nhưng thực chất là tích 1* 2 * 3 * 1 nên khi output dòng 2 mới có kết quả là 4 .
và đây là đề thi hsg tỉnh lớp 12 tuy mình mới học lớp 10 và mình nghĩ bạn lớn hơn mình nhiều tuổi nhưng nếu bạn không giúp được thì thôi đừng nói người khác là học sinh tiểu học thế, mình mới học có thắc mắc mới hỏi có j sai sao ??!!!

Đề sai nhiều, test cũng sai (xem log).

Chỗ đó là từ vị trí L đến vị trí R (hay a[L…R])

6 Likes

Ohhhhhhhhhhhh
Cậu không biết tính tích số từ l tới r. Sorry, tính tích phải lớp 2 mới học cơ.
Vì cậu không biết cách tính tích số, có lẽ cậu chỉ có thể chuyển nó sang phép cộng. Ví dụ, muốn tính tích của 2 với 3, cậu dùng vòng lặp để cộng số 2 3 lần.
Nó khó lắm, lớp 1 như cậu chưa làm được đâu.
Thôi, cậu dành thời gian chơi búp bê đi, vài năm nữa quay lại làm cũng ko muộn.

Hope it helps!

4 Likes

mình vừa mới sửa lại câu trả lời rồi bạn có thể đọc để hiểu í được rõ ràng hơn

mình nghĩ không sai đâu vì đây là đề thi tỉnh chính thức của lớp 12 năm nay của tỉnh mình mà

có đó, sai nhiều lắm Bình. Đây là bài cơ bản, cậu ko tự suy nghĩ, không tự làm được thì đừng hi vọng thi thố gì.
Tớ biết kiểu người của cậu, cậu không thể khá lên được nếu cậu nghĩ việc ném 1 cái đề lên đây, ko chứng tỏ mình đã bỏ công làm và suy nghĩ, rồi chờ ăn sẵn từ lòng tốt của mọi người đâu.

Tớ hi vọng gia đình và thầy cô giáo cậu đã dạy cậu điều cơ bản đó. Nếu không, tớ rất tiếc, không ai dạy được cậu cả :slight_smile:

5 Likes

mình mới học c++ được 1 tháng và đúng là mình chưa hiểu j nhiều cả nhưng đây không có nghĩa là mình chưa làm và mình vẫn đang sửa code bài này từ lúc 7h sáng đến bây giờ, mình hỏi có nghĩa là mình chưa làm ???!!

Thế code đâu?
Tớ nghĩ, common sense, nếu cậu không show code, mọi người có quyển assume cậu chưa làm, phải chứ?
Cho tới khi cậu chứng minh được điều ngược lại, giả thiết đó vẫn hợp lý.

Anw, tớ cũng biết cậu đang cố né tránh những điều khác, như việc tớ nói đây là bài tập cơ bản, và cố gắng phản ứng ngược lại bằng cách đưa ra lý lẽ “tớ hỏi đâu có nghĩa là tớ chưa làm?” để lái cuộc trò chuyện đi chỗ khác, và cố đưa ra việc cậu không biết tính tích các số để chờ ai đó đưa code.
Nó không hiệu quả lắm đâu.
Giờ, chúng ta có thể cùng ngồi chờ, xem ai giúp cậu được bài tính tích này :slight_smile:

4 Likes
#include <bits/stdc++.h>

using namespace std;
unsigned long long m,n,q,k,i,x,M1[1000000],L,R,M2[100000][10],kq;
int main()
{
    ifstream fin ("DIV.INP");
    ofstream fout ("DIV.OUT");
    cin>>n;
    for (m=1; m<=n; m++)
        cin>>M1[m];
    cin>>q;
    for (m=1; m<=q; m++)
        for (n=1; n<=3; n++)
            cin>>M2[m][n];
    for (m=0; m<q; m++)
    {
        if (M2[m][0]==0)
        {
            q=M2[m][1];
            M1[q]=M2[m][2];
        }
    }
    for (m=1; m<=n; m++)
        cout<<M1[m];

    return 0;
}

đây bạn, mình không đủ trình nên chỉ viết được thao tác loại 0 và vẫn đang sai linh tinh ở đoạn đấy, mình chỉ có thể chứng minh được đến đây thôi, bạn không tin thì tùy bạn, lí do mình không đưa code nên đây vì nó vẫn chưa ra được 1 thể thống gì và chiều nay cô mình làm contest cho bài này nên mình không có thời gian ở đây đôi co với bạn nữa , bạn giúp được thì mình chân thành cảm ơn không thì cũng rất biết ơn vì ít nhất bạn đã có đóng góp cho bài viết của mình . Chỉ có vậy thôi.

@Binh_Bao1 cậu chưa trả lời chỗ này cho mọi người để làm rõ đề bài nè.

Ấy ấy, cái này không liên quan đến cú pháp hay thứ gì cao siêu gì mà. Chỉ cần đến vòng lặp, if…else, mảng với biết phép chia dư trong C++ là có thể nghĩ được 1 cách nào đó không phải tối ưu nhưng cũng giải quyết được 1 số case có giá trị nhỏ. Chỉ đơn giả là nhân tất cả những số tìm được lại với nhau rồi chia cho giá trị kia thôi mà. Cái bạn cần bây giờ không phải là lao vào code mà là tập trung vào việc tư duy thì hơn.

Nãy bạn chưa đưa ra lí do để thuyết phục mọi người rằng bạn đang cố gắng nên không ai nghĩ bạn đang suy nghĩ là chuyện đương nhiên.

Hiểu sai nè. Gửi lên thì mọi người mới biết sửa chứ không thì biết bạn sai ở đâu mà mò.

6 Likes

Theo mình hiểu thì là từ vị trí L đến R , thật ra bạn nên đọc hết đề mà xem chứ có đề bài rồi, vd có luôn rồi mình cũng từ cái này mà tự hiểu đầu bài , đây là mình cũng tự hiểu

Không biết giới hạn của số thao tác là bao nhiêu nhỉ? Nếu số thao tác >= limit của n thì solution chuẩn của bài này là basic của cỡ HSG, cách giải naive không gặm nổi đâu.

[off-topic] Với tình hình này, mình nghĩ bạn nên dành 1 năm để học để luyện thi HSG thay vì đâm đầu vào thi ngay với những bài như thế này (và sẽ còn khó hơn nhiều nữa).

3 Likes

Mình học chuyên tin và cô mình giao phải làm bài này , và cô bảo ko cần làm được full điểm chứ mình không tự nhiên đâm đầu vào ôn Hsg đâu

Còn câu hỏi này nữa, bạn đã đọc chưa?


Anyway, trong lúc chưa debug hoàn chỉnh thì refresh não bằng cách đọc nội quy của diễn đàn đã nhé.

6 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?