Assoziativer Algorithmus zur Bearbeitung von Fragen

Assoziativer Algorithmus zur Bearbeitung von Fragen

Problembeschreibung
Klein A und Klein B spielen Karten. Auf jeder Karte steht ein Punkt, und alle Karten werden offen auf einen Stapel gelegt. Jetzt lernen sie, wie man die Karten austeilt.
Die von ihnen entwickelte Kartenausteilungsstrategie lautet wie folgt: Klein A gibt jedes Mal die oberste Karte des Kartenstapels aus, und Klein B schneidet die Karten vor jedem Austeilen ab. Unter der Annahme, dass sich n Karten im Kartenstapel befinden, dann wird Klein B Wird B die ersten ⌊n/3⌋ Karten von der Oberseite des Stapels nach unten legen (⌊x⌋ bedeutet, x abzurunden). Nun gebe ich Ihnen von oben nach unten die Punkte jeder Karte im Anfangsstapel an. Wie sieht die endgültige Kartenausteilungsreihenfolge gemäß der oben genannten Kartenausteilungsstrategie aus?
Zum Beispiel ist der anfängliche Stapel [4, 5, 2, 3, 1, 2] (von links nach rechts sind die Punkte jeder Karte im Stapel von oben nach unten aufgeführt). Zuerst wird Little B die erste ⌊6 setzen /3⌋=2 Lege eine Karte unten auf den Stapel, und der Stapel wird zu [2, 3, 1, 2, 4, 5], dann schickt Klein A die 2 oben auf den Stapel und den Stapel wird zu [3, 1, 2, 4, 5]. Dann legt Klein-B die erste ⌊5/3⌋=1-Karte unter den Kartenstapel, und der Kartenstapel wird zu [1, 2, 4, 5, 3], und dann kommt Klein-A und die 1 oben drauf Der Kartenstapel wird ausgeteilt, und der Kartenstapel wird zu [2, 4, 5, 3]... Nachdem man weiterhin gemäß der Austeilstrategie gearbeitet hat, kann die endgültige Austeilreihenfolge als [2, 1, 4, 3] erhalten werden , 2, 5]

Eingabebeschreibung
Die erste Zeile ist eine positive ganze Zahl n, die angibt, dass der ursprüngliche Kartenstapel n Karten enthält.
Die zweite Zeile besteht aus n positiven ganzen Zahlen a_1, a_2, ..., a_n. Die i-te Zahl a_i stellt die Nummer der i-ten Karte von oben nach unten im Stapel dar.

Ausgabebeschreibung:
Eine Zeile aus n positiven Ganzzahlen b_1, b_2, …, b_n, getrennt durch Leerzeichen, wobei b_i die Anzahl der zum i-ten Mal ausgeteilten Karten darstellt.

Eingabebeispiel 1
6
4 5 2 3 1 2

Ausgabebeispiel 1
2 1 4 3 2 5

Datenbereich und Beschreibung
30 % Datengarantie: 1<=n<=10, 1<=a_i<=1000
80 % Datengarantie: 1<=n<=100, 1<=a_i<=1000
100 % Datengarantie: 1 <=n<=1000, 1<=a_i<=1000

Algorithmusidee:
Die Idee dieser Frage ist Simulation. Es ist nicht sehr schwierig, diesen Prozess durch eine doppelendige Warteschlange zu simulieren.

#include<iostream>
#include<vector>
#include<deque>

using namespace std;

int main()
{
    int n;
    deque<int> a;
    vector<int> res;
    cin >> n;
    for (int i = 0; i < n; ++ i)
    {
        int t;
        cin >> t;
        a.push_back(t);
    }
    while(a.size())
    {
        int m = a.size() / 3;
        vector<int> b;
        for (int i = 0; i < m; ++ i)
        {
            b.push_back(a.front());
            a.pop_front();
        }
        for (int i = 0; i < m; ++ i)
        {
            a.push_back(b[i]);    
        }
        
        res.push_back(a.front());
        a.pop_front();
    }
    for (int i = 0; i < res.size(); ++ i)
    {
        cout << res[i] << " ";
    }
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_51447496/article/details/135207578
Recomendado
Clasificación