2020年3月第2週学習心得

4746 ワード

 


学習のまとめ


スタック


先進後出、単一操作端;
ヘッダファイル#include
定義:stack stack_name;例:stack s;
操作:
  • empty()--スタック内が空であるかどうかを示すbool型を返します(s.empty()
  • size()--スタック内の要素の数(s.size())
  • を返します.
  • top()--スタックトップ要素の値(s.top())
  • を返します.
  • pop()--スタックトップ要素(s.pop()を削除します.)
  • push(data_type a)--スタックに要素a(s.push(a);)を押し込む.

  • キュー(queue)


    先進先出、低入頂出;
    ヘッダファイル#include
    定義:queue queue_name;例えば、queue q;
    操作:
  • empty()--queueが空であるかどうかを示すbool型を返します(q.empty()
  • size()--queue内の要素の数(q.size())
  • を返します.
  • front()--queue内の次の要素(q.front())
  • を返します.
  • back()--queue内の最後の要素(q.back())
  • を返します.
  • pop()--queueの要素を削除します(q.pop()
  • push(data_type a)--要素aをqueueに配置します(q.push(a);).

  • vector(動的配列)


    ヘッダファイル#include
    定義:vector vector_name;例:vectorv;
    操作:
  • empty()--vectorが空であるかどうかを示すbool型(v.empty()
  • )を返します.
  • size()--vector内の要素の数(v.size())
  • を返します.
  •   push_back(data_type a)最後尾
  • に要素aを挿入する
  •   pop_back()最後尾要素を
  • 削除
  • v[i]類似配列i番目の位置をとる要素(v[0])
  •  

  • map


    mapのすべての要素はpairで、キー値+実値に分けられます.
    ヘッダファイル#include
    操作:
  • m.size()は、容器サイズ
  • を返す.
  • m.empty()返却容器が空か
  • m.count(key)戻りキー値がkeyに等しい要素の個数
  • m.lower_bound(key)は、キー値がkeyに等しい要素の最初の挿入可能な位置
  • を返す
  • m.upper_bound(key)はキー値がkeyに等しい要素の最後の挿入可能な位置
  • を返す.

    反復器(iterator)


    反復器は、コンテナ内のオブジェクトへのアクセス方法を提供し、コンテナ内のオブジェクトの範囲を定義します.反復器はポインタのようなものです.実際、C++のポインタも反復器です.標準ライブラリでは、vectorオブジェクトの要素にアクセスするために下付きラベルを使用するほか、反復器(iterator)を使用する別の要素にアクセスする方法も用意されています.反復器は、コンテナ内の要素をチェックし、要素を巡回するデータ型です.
    標準ライブラリはvectorを含む各標準コンテナに対して反復器タイプを定義します.反復器タイプは、下付きスケール操作よりも汎用化された方法を提供します.すべての標準ライブラリコンテナでは、対応する反復器タイプが定義されていますが、少数のコンテナでは下付きスケール操作がサポートされています.反復器はすべてのコンテナに適用されるため、現代のC++プログラムは、下付き操作をサポートするvectorタイプであっても、下付き操作ではなく反復器を使用してコンテナ要素にアクセスする傾向があります.
    コンテナのタイプ:
    各コンテナタイプにはvectorなどの独自の反復器タイプが定義されています.
     vector::iterator iter;
    この文は、vector定義のiteratorタイプであるiterという変数を定義します.各標準ライブラリコンテナタイプには、反復器の実際のタイプと同じ意味を持つiteratorというメンバーが定義されています.
     
    これまで反復器を使用したことがないため、この部分についてはあまりにも疎かで、詳細を調べて理解します.

    問題解決


    map入力後の手順を確認するために、技術的な含有量はありませんが、記憶を深めることができて理解しやすいコードを書きました.
    #include
    #include
    using namespace std;
    int main()
    {
        mapa;
        a["aaa"]=1;
        a["ccc"]=2;
        a["bbb"]=3;
        map::iterator pos;
        pos=a.find("aaa");
        for(;pos!=a.end();pos++)
        {
            cout<first<second<

    このようにmapはstringタイプのキー値を辞書順に自動的に並べ替え,自然キー値と実値は対応関係で並べ替えられる.

    バッテリ寿命


    Sさんは新しい携帯ゲーム機を買いました.このゲーム機は5番電池2本で電力を供給しています.寿命も異なり、5時間使えるものもあれば、3時間しか使えないものもあります.明らかにもし彼が2つの電池しか1つで5時間1つで3時間使えるならば、彼は3時間のゲームしかできなくて、1つの電池の残りの電気量が使えないことがあって、しかしもし彼がもっと多くの電池があれば、もっと十分にそれらを利用することができて、それぞれ3、3、5時間使うことができて、彼は先に2つの3時間使える電池を使って、30分使ってからその中の1つを5時間使える電池に変えることができます.2時間半後に残りの1本の電池をさっき交換した電池(その電池は2.5時間も使える)に交換すれば、全部で5.5時間も使えるので、少しも無駄になりません.
    現在、バッテリーの数とバッテリーが使える時間が知られていますが、できるだけ長く使う方法を探してください.

    入力


    複数セットのデータを入力します.各グループのデータは2行を含み、第1行は1つの整数N(2≦N≦1000)であり、電池の数を表し、次の行はN個の正の整数で電池が使用できる時間を表す.

    しゅつりょく


    各グループのデータに対して1行出力し、バッテリーが使える時間を表し、小数点以下1桁まで保持します.

    サンプル入力

    2
    3 5
    3
    3 3 5

    サンプル出力

    3.0
    5.5

    テーマに与えられた条件を分析し、いくつかの特殊な例を挙げた後、本題を大きく2つの状況に分けることができ、テーマに与えられた2つの例の状況を得ることができる.
  • 所有しているいくつかの電池のうち1つが強すぎて、他のすべての電池が電気が切れた後、この電池には余剰電力があり、余剰(浪費)が発生します.
  • 電池の品質と健康状況の差は大きくなく、すべての電池で電力を消費することができます.

  • 上記の2つの状況を分析したところ、両者とも顕著な特徴があることがわかり、この特徴を判断した.
  • 使用時間が最も長い電池が総使用時間の半分を超えた場合、他の人はそれを消費することができず、この場合無駄になるため、有効使用時間は他の電池の使用時間の和となる.
  • 最大者の使用時間が総和の半分未満の場合、それは必ず少なくとも2つの電池を除いて、私たちは残りの電池を最大者と等しく消費するまで、残りの電池を車輪戦させ、最後に両者を消費させることができます.この場合は無駄がないので、有効使用時間は合計の半分です.

  • この問題に対する解題の構想は十分にはっきりしていて、貪欲な思想に対しても比較的に良い理解があります.
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    //#define INF 0x3f3f3f3f
    //typedef long long ll;
    using namespace std;
    
    int a[1000+10];
    int main()
    {
        int n;
        while(cin>>n)
        {
            int sum=0,max=0;
            for(int i=0;i>a[i];
                if(a[i]>max)
                    max=a[i];
                sum+=a[i];
            }
            if(max>=sum-max)cout<

    考えが悟る


    家で学ぶことと学校で学ぶことの差はやはりとても大きくて、1つまた1つの難題に直面して、とても貴重なのは霊光が現れた時で、家で学ぶ最大の敵は自分で、自分が引き続き努力して自分に勝つことができることを望んでいます.また、疫病が早く終わって、できるだけ早く正常な学習生活に入ることを望んでいます.