Tägliche Bürstenfragen 38

Ressourcenlimit
Speicherlimit: 256,0 MB C/C++-Zeitlimit: 1,0 s Java-Zeitlimit: 3,0 s Python-Zeitlimit: 5,0 s
Problembeschreibung
  Die Winterferien sind da und die Schüler fahren gemeinsam mit dem Zug. Es gibt N Abteile in einem Zug, und ein Abteil bietet Platz für vier Personen. Die Abteile sind voll und die von den Schülern gekauften Fahrkarten sind nicht zusammen. In einigen Abteilen gibt es keine Klassenkameraden und in einigen Abteilen gibt es nur einen Klassenkameraden. In anderen gibt es zwei, Manche haben drei, andere sind voller Klassenkameraden. Wenn weniger als drei Klassenkameraden in einer Kabine sind, werden sie sich sehr einsam fühlen. Glücklicherweise kann man mit anderen Passagieren über einen Sitzplatzwechsel verhandeln, damit die Schüler im selben Abteil wohnen können, aber es ist mühsam, andere zum Sitzplatzwechsel zu überreden. Darf ich fragen, wie oft die Mindestanzahl an Umtauschvorgängen in allen Abteilen möglich ist? mit Klassenkameraden Sitzplätze haben? Nicht weniger als drei Klassenkameraden?
Eingabeformat
  Die erste Eingabezeile enthält eine positive ganze Zahl N, die die Anzahl der Fächer angibt.
  In der zweiten Eingabezeile stehen N Zahlen von 0 bis 4, die angeben, wie viele Schüler sich in jedem Fach befinden.
Ausgabeformat
  Eine Ganzzahl, die die minimale Anzahl von Austauschvorgängen darstellt. Kann die Anforderung durch den Tausch trotzdem nicht erfüllt werden, wird -1 ausgegeben.
Beispieleingabe
5
1 2 2 4 3
Beispielausgabe
2
Datengröße und Übereinstimmung
  1<=N<=1000000
Antwort: Es wird später eine Zeitüberschreitung geben, und es sollte einige Situationen geben, die nicht berücksichtigt wurden. Dies dient nur zur Bereitstellung eine konsequente Idee

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll L = 1e6+1;
bool flag=0;
ll n,counts;
ll carriage[L];
int main(){
    
    
    cin >> n;
    for (int i =1;i<=n;i++){
    
    
        ll temp = 0;
        cin >> temp;
        if(temp!=3)
        carriage[i]=temp;
        else{
    
    
        i--;n--;
        }
    }
    for(int i =1;i<=n;i++){
    
    
    // cout<<carriage[i];
        for(int j = i+1;j<=n;j++){
    
    
            if(carriage[i]+carriage[j]==3){
    
    
                carriage[i] = carriage[i]+carriage[j];
                counts++;
                flag=1;
            }
            if(flag){
    
    
                for(int k =j;k<n;k++){
    
    
                    carriage[k] = carriage[k+1];
                }
                n--;
                flag=0;
            }

        }
    }
    for(int i =1;i<=n;i++){
    
    
        for(int j = 1;j<=n;j++){
    
    
            if(carriage[i]==2)
                if(carriage[j]==4){
    
    
                    carriage[i] = 3;
                    carriage[j] = 3;
                    counts++;
                }
        }
    }
    for(int i =1;i<=n;i++){
    
    
        if(carriage[i]<3 && carriage[i]>0){
    
    
        cout<<-1;
        return 0;
        }
    }
 
    cout<<(counts);
    return 0;


}

おすすめ

転載: blog.csdn.net/weixin_47988292/article/details/130039537