STL 的题目练习(HDU1263 HDU1075 HDU 1004 ZOj 2724)

  现在STL对我熟了,我对它还不熟,加油啊微笑

  这种循环输入的不清空容器则要在主函数中定义……

 map容器

运用STL,由于map<string,int>存储是按KEY值的字母顺序排序,所以这里呢省去了排序的步骤

HDU 1263

  1. #include<iostream>  
  2. #include<cstdio>  
  3. #include<string>  
  4. #include<map>  
  5. using namespace std;  
  6. int main()  
  7. {  
  8.     map<string,map<string,int> > p;  
  9.     map<string,int> q;  
  10.     map<string,map<string,int> >::iterator i;  
  11.     map<string,int>::iterator j;  
  12.     int n,m,t;  
  13.     string str1,str2;  
  14.     cin>>n;  
  15.     while(n--)  
  16.     {  
  17.         p.clear();  
  18.         q.clear();  
  19.         cin>>m;  
  20.         while(m--)  
  21.         {  
  22.             cin>>str1>>str2>>t;  
  23.             p[str2][str1]+=t;  
  24.         }  
  25.         for(i=p.begin();i!=p.end();i++)  
  26.         {  
  27.             cout<<i->first<<endl;  
  28.             q=i->second;  
  29.             for(j=q.begin();j!=q.end();j++)  
  30.                 cout<<"   |----"<<j->first<<"("<<j->second<<")"<<endl;  
  31.         }  
  32.         if(n)  
  33.             cout<<endl;  
  34.     }  
  35. }  
#include<iostream>
#include<cstdio>
#include<string>
#include<map>
using namespace std;
int main()
{
    map<string,map<string,int> > p;
    map<string,int> q;
    map<string,map<string,int> >::iterator i;
    map<string,int>::iterator j;
    int n,m,t;
    string str1,str2;
    cin>>n;
    while(n--)
    {
        p.clear();
        q.clear();
        cin>>m;
        while(m--)
        {
            cin>>str1>>str2>>t;
            p[str2][str1]+=t;
        }
        for(i=p.begin();i!=p.end();i++)
        {
            cout<<i->first<<endl;
            q=i->second;
            for(j=q.begin();j!=q.end();j++)
                cout<<"   |----"<<j->first<<"("<<j->second<<")"<<endl;
        }
        if(n)
            cout<<endl;
    }
}
HDU1075

  这个题目是对字符串的处理(用字典树也可以),具体就是会判断初始终止条件,熟练运用map容器,但是显然我还做不到,会继续学习STL,我要和你混熟大笑

  1. #include<iostream>  
  2. #include<string>  
  3. #include<map>  
  4. using namespace std;  
  5. //const int N 3005;  
  6. map<string,string> mapp;  
  7. bool Char(char ch)  
  8. {  
  9.     if(ch>='a'&&ch<='z')  
  10.         return true;  
  11.     return false;  
  12. }  
  13. int main()  
  14. {  
  15.     string str1,str2;  
  16.     cin>>str1;//忽略start  
  17.     while(cin>>str1)  
  18.     {  
  19.         if(str1=="END"break;  
  20.         cin>>str2;  
  21.         mapp[str2]=str1;  
  22.     }  
  23.     cin>>str1;  
  24.     getline(cin,str1);  
  25.     while(getline(cin,str1))  
  26.     {  
  27.         str2="";//空  
  28.         if(str1=="END")  break;  
  29.         for(int i=0;i<str1.size();i++)  
  30.         {  
  31.             if(Char(str1[i]))//如果是字母的话就存上  
  32.                 str2+=str1[i];  
  33.             else  
  34.             {  
  35.                 if(mapp[str2]!="")  
  36.                     cout<<mapp[str2];  
  37.                 else  
  38.                     cout<<str2;  
  39.                 cout<<str1[i];  
  40.                 str2="";  
  41.             }  
  42.         }  
  43.         cout<<endl;  
  44.     }  
  45.     return 0;  
  46. }  
#include<iostream>
#include<string>
#include<map>
using namespace std;
//const int N 3005;
map<string,string> mapp;
bool Char(char ch)
{
    if(ch>='a'&&ch<='z')
        return true;
    return false;
}
int main()
{
    string str1,str2;
    cin>>str1;//忽略start
    while(cin>>str1)
    {
        if(str1=="END") break;
        cin>>str2;
        mapp[str2]=str1;
    }
    cin>>str1;
    getline(cin,str1);
    while(getline(cin,str1))
    {
        str2="";//空
        if(str1=="END")  break;
        for(int i=0;i<str1.size();i++)
        {
            if(Char(str1[i]))//如果是字母的话就存上
                str2+=str1[i];
            else
            {
                if(mapp[str2]!="")
                    cout<<mapp[str2];
                else
                    cout<<str2;
                cout<<str1[i];
                str2="";
            }
        }
        cout<<endl;
    }
    return 0;
}

HDU 1004(非STL解法见1004传送门

  1. #include<iostream>  
  2. #include<map>  
  3. #include<string>  
  4. using namespace std;  
  5. int main()  
  6. {  
  7.     int n;  
  8.     string str;  
  9.     while(cin>>n,n)  
  10.     {  
  11.         map<string,int>mapp;  
  12.         map<string,int>:: iterator pr;  
  13.         for(int i=0;i<n;i++)  
  14.         {  
  15.             cin>>str;  
  16.             mapp[str]++;//将元素存入map容器中  
  17.         }  
  18.         int maxn=0;  
  19.         for(pr = mapp.begin();pr != mapp.end();pr++)  
  20.         {  
  21.             if(pr->second > maxn)  
  22.             {  
  23.                 maxn = pr->second;  
  24.                 str = pr->first;  
  25.             }  
  26.         }  
  27.         cout<<str<<endl;  
  28.     }  
  29.     return 0;  
  30. }  
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
    int n;
    string str;
    while(cin>>n,n)
    {
        map<string,int>mapp;
        map<string,int>:: iterator pr;
        for(int i=0;i<n;i++)
        {
            cin>>str;
            mapp[str]++;//将元素存入map容器中
        }
        int maxn=0;
        for(pr = mapp.begin();pr != mapp.end();pr++)
        {
            if(pr->second > maxn)
            {
                maxn = pr->second;
                str = pr->first;
            }
        }
        cout<<str<<endl;
    }
    return 0;
}

ZOJ 2724

用结构体存储各元素,优先队列存储存储结构体

  1. #include<iostream>//zoj 2724  
  2. #include<queue>  
  3. #include<string>  
  4. #include<cstdio>  
  5. using namespace std;  
  6. struct Compare  
  7. {  
  8.     char str[30];  
  9.     int m;  
  10.     int pr;//优先级  
  11.     friend bool operator <(Compare a,Compare b)  
  12.     {  
  13.         return a.pr>b.pr;  
  14.     }  
  15. };  
  16. priority_queue<Compare>it;  
  17. int main()  
  18. {  
  19.     Compare pluss;  
  20.     string str1;  
  21.     while(cin>>str1)  
  22.     {  
  23.         if(str1=="GET")  
  24.         {  
  25.             if(it.empty())  
  26.             {  
  27.                 cout<<"EMPTY QUEUE!"<<endl;  
  28.                 continue;  
  29.             }  
  30.             pluss=it.top();  
  31.             it.pop();//移除这个元素  
  32.             cout<<pluss.str<<" "<<pluss.m<<endl;  
  33.         }  
  34.         if(str1=="PUT")  
  35.         {  
  36.             scanf("%s%d%d",pluss.str,&pluss.m,&pluss.pr);  
  37.             it.push(pluss);  
  38.         }  
  39.     }  
  40.     return 0;  
  41. }  
#include<iostream>//zoj 2724
#include<queue>
#include<string>
#include<cstdio>
using namespace std;
struct Compare
{
    char str[30];
    int m;
    int pr;//优先级
    friend bool operator <(Compare a,Compare b)
    {
        return a.pr>b.pr;
    }
};
priority_queue<Compare>it;
int main()
{
    Compare pluss;
    string str1;
    while(cin>>str1)
    {
        if(str1=="GET")
        {
            if(it.empty())
            {
                cout<<"EMPTY QUEUE!"<<endl;
                continue;
            }
            pluss=it.top();
            it.pop();//移除这个元素
            cout<<pluss.str<<" "<<pluss.m<<endl;
        }
        if(str1=="PUT")
        {
            scanf("%s%d%d",pluss.str,&pluss.m,&pluss.pr);
            it.push(pluss);
        }
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值