AcWing第33场周赛题解

第33场周赛活动链接

problem.A AcWing4206 判断数字

将数字看成字符串,对每一位进行检查

代码

#include <iostream>

using namespace std;

int main()
{
    string tmp;
    cin>>tmp;
    int count=0;
    for(int i=0;i<tmp.size();i++)
        if(tmp[i]=='4'||tmp[i]=='7') count++;
    
    if(count==4||count==7)
        puts("YES");
    else
        puts("NO");
        
    return 0;
}

problem.B AcWing4207 最长合法括号子序列

记录合法的后括号数,输出时乘2即可,何为合法的后括号,即在此括号前,还有未配对的前括号,只要是未配对过的前括号,就可以进行配对。

代码

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string tmp;
    cin>>tmp;
    int res=0,cnt=0;
    for(int i=0;i<tmp.size();i++)
    {
        if(tmp[i]=='(') cnt++;
        else
        {
            if(cnt>0)
            {
                cnt--;
                res++;
            }
        }
    }
    
    cout<<res*2;
    
    return 0;
}

problem.C AcWing4208 电话号码

先看数据范围,很小,用STL模拟即可

代码

#include <iostream>
#include <unordered_map>
#include <vector>

using namespace std;

unordered_map<string,int> mp;
vector<string> vec[30];//vec[i]是数组
int idx;

void insert(string number,int loc)
{
    for(int i=0;i<vec[loc].size();i++)
    {
        if(number.size()<=vec[loc][i].size())
        {
            if(number==vec[loc][i].substr(vec[loc][i].size()-number.size(),number.size()))
                return;
        }
    }
    vector<string> tmp;
    for(int i=0;i<vec[loc].size();i++)
    {
        if(number.size()>=vec[loc][i].size())
        {
            if(number.substr(number.size()-vec[loc][i].size(),vec[loc][i].size())!=vec[loc][i])
                tmp.push_back(vec[loc][i]);
        }
        else
            tmp.push_back(vec[loc][i]);
    }
    vec[loc]=tmp;
    vec[loc].push_back(number);
}

int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        string tmp;
        int cnt;
        cin>>tmp>>cnt;
        if(mp.count(tmp)==0)
        {
            mp[tmp]=idx;
            for(int i=0;i<cnt;i++)
            {
                string number;
                cin>>number;
                insert(number,idx);
            }
            idx++;
        }
        else
        {
            for(int i=0;i<cnt;i++)
            {
                string number;
                cin>>number;
                insert(number,mp[tmp]);
            }
        }
    }
    
    cout<<mp.size()<<endl;
    for(auto x:mp)
    {
        cout<<x.first<<' '<<vec[x.second].size();
        for(int i=0;i<vec[x.second].size();i++)
            cout<<' '<<vec[x.second][i];
        cout<<endl;
    }
    
    return 0;
}
posted @ 2022-01-09 09:20  泝涉江潭  阅读(23)  评论(0)    收藏  举报