8.26 |研究ノート

EOJのDNAシーケンシングの質問を開始し、このテーマは、2つのテストポイントは、アウト常に問題、問題の元の2横断時の複雑さを指摘し、その学習マップを活用❤高齢者のために非常に感謝して時間です持っています。

値の並べ替えに基づいて感じ2つの困難、1つのイテレータ、第二は、あります。

 

まず、イテレータ

イテレータは、一時的に動作がポインタとして解釈することができる観点から、非常にハイエンドを見て感じて?あなたがアクセス権を持っていない場合でも、イテレータは非常に困難であり、そのような関数の戻り値として、STLコンテナに関連したハイエンドのポイントは、反復子見つけることです

 

第二に、値に応じて並べ替え

キーマップに従ってソートCSDN上の他の方法を見つけることができません値に従って並べ替えるので、妥協とベクター上に地図上のペアを入れ、その後、CMPを書くことができ、あなたはそれを並べ替えることができます

 

ACコードはで記録されています

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
int型のトン、CNT。
文字列TMP; 
typedefのペア < 文字列int型 > dnapair。
マップ < 文字列int型 > DNA; 
ベクトル <dnapair> V。
マップ < 文字列int型 > ::イテレータITER。
ベクトル <dnapair> ::イテレータiter2。
BOOL CMP(dnapairのB dnapair)
{ 
    場合(a.second = b.second!)リターン a.second < b.second。
    返す a.first < b.first。
} 
int型のmain()
{ 
   CIN >> T。
   一方、(t-- 
   { 
       CIN >> TMP。
       ITER = dna.find(TMP)。
       もし(!ITER = dna.end())DNA [TMP] ++ ;
        dna.insert(ペア< 文字列整数 >(TMP、1 )); 
   } 
   のための(!ITER = dna.begin(); ITER = dna.end(); ITER ++ 
   { 
       v.push_back(dnapair(ITER - >まず、iter-> 秒))。
   }
   ソート(v.begin()、v.end()、CMP);
   (iter2 = v.begin();!iter2 = v.end(); iter2 ++ 
    coutの << iter2->最初<< てendl;
   リターン 0 ; 
}

 

 

突然、ここで思い出したの前にタイトルを書きました

 

問題は、Pythonのテストマシンは、私は突然思い出し、これをビット、C ++で書かれた書き込み(単独でフォーマットされた入力Gaosi私は、このトピックや使いやすいPY)に関連しています。

、降順での発生数に応じて、数値自体が表示され昇順にソートの数が同じ難易度を上げます。

#include <bits/stdc++.h>
using namespace std;
int t,tmp,sum;
char c;
map<int,int>cnt;
typedef pair<int,int>intpair;
vector <intpair>v;
map<int,int>::iterator iter;
vector<intpair>::iterator iter2;
bool cmp(intpair a,intpair b)
{
    if(a.second!=b.second)return a.second>b.second;
    return a.first<b.first;
}
int main()
{
   cin>>tmp;
   cnt.insert(pair<int,int>(tmp,1));
   c=getchar();
   while(c==',')
   {
       cin>>tmp;
       if(cnt.find(tmp)!=cnt.end())cnt[tmp]++;
       else cnt.insert(pair<int,int>(tmp,1));
       c=getchar();
   }
   for(iter=cnt.begin();iter!=cnt.end();iter++)
    v.push_back(intpair(iter->first,iter->second));
   sort(v.begin(),v.end(),cmp);
   for(iter2=v.begin();iter2!=v.end();iter2++)
    cout<<iter2->first<<' '<<iter2->second<<endl;
   return 0;
}

 

 

 暂时就这样,万望不吝赐教~

おすすめ

転載: www.cnblogs.com/MissCold/p/11415660.html