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;
}

浙公网安备 33010602011771号