2020年3月第2週学習心得
4746 ワード
学習のまとめ
スタック
先進後出、単一操作端;
ヘッダファイル#include
定義:stack stack_name;例:stack s;
操作:
スタック
先進後出、単一操作端;
ヘッダファイル#include
定義:stack stack_name;例:stack s;
操作:
キュー(queue)
先進先出、低入頂出;
ヘッダファイル#include
定義:queue queue_name;例えば、queue q;
操作:
vector(動的配列)
ヘッダファイル#include
定義:vector vector_name;例:vectorv;
操作:
map
mapのすべての要素はpairで、キー値+実値に分けられます.
ヘッダファイル#include
操作:
反復器(iterator)
反復器は、コンテナ内のオブジェクトへのアクセス方法を提供し、コンテナ内のオブジェクトの範囲を定義します.反復器はポインタのようなものです.実際、C++のポインタも反復器です.標準ライブラリでは、vectorオブジェクトの要素にアクセスするために下付きラベルを使用するほか、反復器(iterator)を使用する別の要素にアクセスする方法も用意されています.反復器は、コンテナ内の要素をチェックし、要素を巡回するデータ型です.
標準ライブラリはvectorを含む各標準コンテナに対して反復器タイプを定義します.反復器タイプは、下付きスケール操作よりも汎用化された方法を提供します.すべての標準ライブラリコンテナでは、対応する反復器タイプが定義されていますが、少数のコンテナでは下付きスケール操作がサポートされています.反復器はすべてのコンテナに適用されるため、現代のC++プログラムは、下付き操作をサポートするvectorタイプであっても、下付き操作ではなく反復器を使用してコンテナ要素にアクセスする傾向があります.
コンテナのタイプ:
各コンテナタイプにはvectorなどの独自の反復器タイプが定義されています.
vector::iterator iter;
この文は、vector定義のiteratorタイプであるiterという変数を定義します.各標準ライブラリコンテナタイプには、反復器の実際のタイプと同じ意味を持つiteratorというメンバーが定義されています.
これまで反復器を使用したことがないため、この部分についてはあまりにも疎かで、詳細を調べて理解します.
問題解決
map入力後の手順を確認するために、技術的な含有量はありませんが、記憶を深めることができて理解しやすいコードを書きました.#include
このように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つの例の状況を得ることができる.
#include
2
3 5
3
3 3 5
3.0
5.5
上記の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<