Cho dãy số A gồm N số nguyên 𝐴1, 𝐴2, … , 𝐴𝑁 (|A𝑖| ≤ 106; i = 1, 2, 3, ..., N) và số nguyên K. Hãy thực hiện các yêu cầu sau: - Tìm giá trị nhỏ nhất của giá trị các phần tử trong dãy số A và lớn hơn K. - Tìm cách chọn K phần tử liên tiếp nhau trong dãy số A sao cho tổng giá trị của chúng là lớn nhất. Dữ liệu vào từ tệp văn bản DAIDIEN.INP có cấu trúc: - Dòng thứ nhất ghi hai số nguyên dương N, K (1 ≤ 𝐾 ≤ 𝑁 ≤ 106). - Dòng thứ hai ghi N số nguyên 𝐴1, 𝐴2, … , 𝐴𝑁. - Các số trên mỗi dòng ghi cách nhau ít nhất một dấu cách. Dữ liệu ra ghi vào tệp văn bản DAIDIEN.OUT theo cấu trúc: - Dòng thứ nhất ghi một số là giá trị nhỏ nhất của giá trị các phần tử trong dãy số A và lớn hơn K. Nếu không tìm được giá trị của phần tử nào trong dãy số A thỏa mãn thì ghi số -1. - Dòng thứ hai ghi tổng giá trị lớn nhất của K phần tử liên tiếp nhau tìm được trong dãy số A. Ràng buộc: - Có 50% số test ứng với 50% số điểm có 𝑁 ≤ 103 , 𝐾 ≤ 2. - Có 30% số test ứng với 30% số điểm có 𝑁 ≤ 103 , 2 < 𝐾 ≤ 103. - Có 20% số test còn lại ứng với 20% số điểm có 103 < 𝑁,𝐾 ≤ 106. Ví dụ: DAIDIEN.INP DAIDIEN.OUT Giải thích INPUT 9 2 9 -1 9 -8 -2 -2 3 5 -8 OUTPUT 3 8

1 câu trả lời

#include <bits/stdc++.h>
using namespace std;

int f[1000005];
int n,m,k;
int d[1000001];
void nhap()
{
    scanf("%d%d%d",&n,&m,&k);
}

void taomang()
{
    f[1]=1;f[2]=1;
    for (int i=3;i<=n;i++) 
     f[i]=(f[i-1]+f[i-2])%m;
}

void qs(int l,int r)
{
    int i,j,x,t;
    x=f[(l+r)/2];
    i=l;j=r;
    while (i<=j)
    {
        while (f[i]<x) i++;
        while (f[j]>x) j--;
        if (i<=j)
        {
            t=f[i];
            f[i]=f[j];
            f[j]=t;
            i++;j--;
        }
    }
    if (l<j) qs(l,j);
    if (i<r) qs(i,r);
}

void taod()
{
    int x=1,y=1,z;
    for (int i=3;i<=n;i++)
    {
        z=(x+y)%m;
        d[z]++;
        y=x;
        x=z;
    }
}

void giai()
{
    int res=0,i=-1;
    while (res<k)
    {
        i++;
        res+=d[i];
        if (res>k)
        {
            printf("%d",i);
            return;
        }
    }
    printf("%d",i-1);
}

void xuli()
{
    if (n<=1000000)
    {
        taomang();
        qs(1,n);
        printf("%d",f[k]);
    }
    else
    {
        taod();
        giai();
    }
}

int main()
{
    nhap();
    xuli();
}

Câu hỏi trong lớp Xem thêm

Các bạn giúp mình bài này mình cần gấp KHÔNG CÓ đoạn văn đâu!!!!! Có một câu chuyện như sau: Một tù trưởng Cherokee đưa hai đứa cháu của mình vào rừng dạo chơi. Sau một lúc đi dạo, ba ông cháu ngồi nghỉ bên một gốc cây và ông bắt đầu nói với hai đứa trẻ: “Có một cuộc chiến tồi tệ đang xảy ra ở bên trong ông. Đây là cuộc chiến giữa hai con sói. Một bên là con sói của nỗi sợ hãi, đều giả, kiêu ngạo và tham lam. Bên kia là con sói của lòng dũng cảm, tử tế, khiêm nhường và yêu thương”. Hai đứa trẻ im lặng lắng nghe câu chuyện của ông cho đến khi thấy ông bảo rằng: “Cuộc chiến đang xảy ra giữa hai con sói này cũng đang diễn ra trong các cháu, không khác gì mọi người”. Hai đứa trẻ suy nghĩ một lúc rồi hỏi vị tù trưởng: “Ông ơi, vậy con sói nào sẽ chiến thắng?”. Người ông nhẹ nhàng nói: “Con sói mà cháu đang nuôi dưỡng.” (Theo “Sau này con sẽ hiểu” – Marc Gellman) Câu 1: Tìm lời dẫn trực tiếp trong đoạn văn trên và cho biết dấu hiệu nhận biết của nó. Câu 2: Trong câu chuyện với hai đứa trẻ, tù trưởng Cherokee luôn nhắc đến “một cuộc chiến”. Em hiểu cuộc chiến này là gì? Từ đây, em hãy cho biết ý nghĩa câu chuyện này cần được hiểu theo nghĩa tường minh hay hàm ý? Câu 3: Nếu được lựa chọn một nhan đề cho câu chuyện, em sẽ lựa chọn như thế nào? Câu 4. Xác định và chỉ rõ 2 phép liên kết có trong đoạn văn trên.

10 lượt xem
2 đáp án
18 giờ trước