Niukeshus ausführliche Erklärung der Fragen

Fügen Sie hier eine Bildbeschreibung ein

 Da diese Frage zeitlich begrenzt ist, ist es nicht möglich, sie mit gewalttätigen Lösungen zu bestehen, und die Ideen können nicht beobachtet werden, sodass die Erfolgsquote unter 15 % liegt. Heute zeige ich Ihnen, wie Sie diese Frage im Detail lösen können. Ich hoffe, es kann helfen. Allen. (persönliche Gedanken)

  • Themenbeschreibung:

Fügen Sie hier eine Bildbeschreibung ein
Geben Sie zwei positive Ganzzahlen ein. Die erste positive Ganzzahl n ist der Bereich dieses positiven Ganzzahlpaars und die zweite Zahl ist der Rest der beiden Zahlen im Paar. Solange eine Zahl in diesem Bereich die erste ist Der Rest der Zahl ist größer oder gleich k.
Beispiel 1 lautet wie folgt
Fügen Sie hier eine Bildbeschreibung ein
Es ist ersichtlich, dass, um alle Zahlenpaare zu erhalten, diese in zwei Teile geteilt werden können. Das x in einen Teil ist kleiner als y und der Rest ist größer als gerade gleich dem bereitgestellten k.

  • Idee:

Analysieren Sie zunächst den ersten Teil, um das Muster zu finden.
Fügen Sie hier eine Bildbeschreibung ein
Dies lässt sich leicht durch Beachtung der Regeln herausfinden. Der erste Teil ist die Summierung der abnehmenden Folge. Verwenden Sie einfach die Summationsformel der arithmetischen Folge, um zu berechnen, wie viele Zahlenpaare es in dem Teil gibt, in dem x ist ist größer als y.
Eingabe n ist gleich 5, k ist gleich 2 und die Formel zum Summieren einer arithmetischen Folge ist der letzte Term minus dem ersten Term multipliziert mit der Anzahl der Terme dividiert durch 2.
Fügen Sie hier eine Bildbeschreibung ein
Das Problem an dieser Frage ist, dass es schwierig ist, die Anzahl der Teilpaare im letzten Teil zu bestimmen. Natürlich können wir anhand von Beispiel 1 nichts sagen. Wir können mehr geben umfassendes Beispiel.
Angenommen n=10,k=2. Listen Sie alle Zahlenpaare auf, die die Bedingungen erfüllen, und beobachten Sie das Muster. Wie folgt
Fügen Sie hier eine Bildbeschreibung ein
Beobachten und beobachten, es fühlt sich sehr chaotisch an und es gibt keine Regeln. Tatsächlich können Sie ihre Regeln finden, indem Sie die Anordnung ändern.
Fügen Sie hier eine Bildbeschreibung ein
Was ist das Muster?
Die Regeln lauten wie folgt:
Fügen Sie hier eine Bildbeschreibung ein
Sie können zunächst herausfinden, was teilbar ist. Wenn Sie beispielsweise in der ersten Zeile durch 3 dividieren, ist der Rest 2 . Nach der Division können Sie das Ergebnis mit y-k multiplizieren. , und dann den Rest finden, zum Beispiel in der zweiten Zeile, (10-4) + 1 geteilt durch 4, der Rest ist 3, 3 ist größer als k, Daher muss der Rest -k hinzugefügt werden, der im Rest enthalten ist.
Bevor Sie sich den Code ansehen, können Sie ihn nach Ihren Vorstellungen selbst eingeben. Diese Frage enthält viele Details und testet Ihre logischen Fähigkeiten.
Code-Implementierung (viele Details werden kommentiert)

int main() {
    
    
    int a = 0, b = 0;
    unsigned long long count = 0;
    scanf("%d %d", &a, &b);
    for (int i = b + 1; i <= a; i++)
    {
    
    
        unsigned long long num = (a - i) / i;
        count += num * (i - b);//可以整除的部分
        if(b>0)//这里有第二个数为0的情况
        {
    
    
            if (((a - i) % i + 1) > b)
            count += (a-i) % i - b+1;//余数部分
        }
        else {
    
    
        count+=a%i;//如果为零,直接加上余数即可。
        }
    }
    count += (unsigned long long)(a - b + 1) * (a - b) / 2;//由于a和b都是int类型,要强转long long,不然部分用例通不过。
    printf("%lld", count);
    return 0;
}

Nachdem Sie es ausgeführt haben, können Sie es erfolgreich bestehen.
Fügen Sie hier eine Bildbeschreibung ein

Ich hoffe, ihr habt alle etwas gewonnen.

Supongo que te gusta

Origin blog.csdn.net/qq_75270497/article/details/134843336
Recomendado
Clasificación