ACwing 第 33 场周赛

1

给定一个整数 n,请你统计其各位数字中 4 和 7 的出现次数。

如果 4 的出现次数加上 7 的出现次数恰好等于 4 或 7,则输出 YES,否则输出 NO。

例如,当 n=40047 时,4 出现了 2 次,7 出现了 1 次,2+1=3,既不是 4 也不是 7,因此,输出 NO;当 n=7747774 时,4 出现了 2 次,7 出现了 5 次,2+5=7,因此,输出 YES。

输入格式
一个整数 n。

输出格式
一行,YES 或者 NO。

数据范围
所有测试点满足 1≤n≤1018。

#include<bits/stdc++.h>
using namespace std;
string temp;
int sum_f,sum_s;
int main(){
    cin>>temp;
    for(auto c:temp){
        if(c=='4')sum_f++;
        else if(c=='7')sum_s++;
    }
    int judge=sum_f+sum_s
    if(judge==4 || judge==7)cout<<"YES"<<endl;
    else cout<<"NO";
    return  0;
}

2
给定一个整数 n,请你统计其各位数字中 4 和 7 的出现次数。

如果 4 的出现次数加上 7 的出现次数恰好等于 4 或 7,则输出 YES,否则输出 NO。

例如,当 n=40047 时,4 出现了 2 次,7 出现了 1 次,2+1=3,既不是 4 也不是 7,因此,输出 NO;当 n=7747774 时,4 出现了 2 次,7 出现了 5 次,2+5=7,因此,输出 YES。

输入格式
一个整数 n。

输出格式
一行,YES 或者 NO。

数据范围
所有测试点满足 1≤n≤1018。

#include<bits/stdc++.h>
using namespace std;
string temp;
int main()
{
  cin>>temp;
  int sum=0,cnt=0;
 // o(n);
  for(int i=0;i<temp.length();i++){
    if(temp[i]=='(')cnt++;
    else if(cnt){
      cnt--;
      sum+=2;
    }
  }
  cout<<sum;
    return 0;
}

3

一个电话销售员正在整理他的电话簿。

电话簿中记录了他的全部客户的电话号码。

一个客户可能有不止一个电话号码。

不同客户可能拥有完全相同的电话号码。

电话簿中一共包含 n 条记录。

每条记录都是首先包含一个字符串,表示客户的姓名,然后包含一个整数,表示本条记录包含的电话号码数量,最后是本条记录所包含的电话号码。

不同客户的姓名两两不同,所以如果两条记录包含的客户姓名相同,那么我们认为这都是记录的同一人的电话信息。

同一记录中可能包含相同的电话号码,不同记录中也可能包含相同的电话号码。

在进行整理时,应遵守如下原则:

如果一个客户拥有多条记录,则需要将这些记录进行合并,每人只保留一条记录,去记录他的全部有效号码。
如果一个客户记录的多个电话号码完全相同,则只保留一个作为有效号码,其余的全部视为无效号码。
如果一个客户记录的两个不同电话号码 a 和 b 满足 a 是 b 的后缀,则号码 a 视为无效号码。
请输出整理后的电话记录。

输入格式
第一行包含整数 n,表示记录数量。

接下来 n 行,每行描述一条记录,首先包含一个长度不超过 10 的由小写字母构成的非空字符串,表示客户姓名,然后包含一个不超过 10 的正整数,表示本条记录包含的号码数量,最后包含本条记录的所有号码,每个号码都是长度不超过 10 的由数字构成的非空字符串,可能包含前导 0。

输出格式
首先输出一个整数 m,表示完成整理后的记录数量。

接下来 m 行,每行输出一条记录信息,格式要求与输入一致。

同一行的数据之间用单个空格隔开。

记录的先后顺序随意,一条记录中的号码顺序随意。

数据范围
前三个测试点满足 1≤n≤4。
所有测试点满足 1≤n≤20。

#include<bits/stdc++.h>
using namespace std;
//map函数本身只会对key value进行排序即第一个 关键字而不会对mapped value进行排序
unordered_map<string,vector<string>>S;
int n;
int main(){
    cin>>n;
    while(n--){
        string name;
        cin>>name;
        int time;
        cin>>time;
        while(time--){
            string str;
            cin>>str;
            reverse(str.begin(),str.end());
            //map的插入后方并不需要count,仅仅在查找时刻用count
            S[name].push_back(str);
        }
    }
    cout<<S.size()<<endl;
    for(auto& [name,ns]: S){
        sort(ns.begin(),ns.end());
        vector<string>res;
        排序后的查找方法!!!
        for(int i=0;i<ns.size();i++){
            if(i+1<ns.size() && ns[i+1].find(ns[i])==0)continue;
            res.push_back(ns[i]);
        }


        cout<<name<<" "<<res.size();
        for(int i=0;i<res.size();i++){
            reverse(res[i].begin(),res[i].end());
            cout<<" "<<res[i];
        }
        cout<<endl;
    } 
    return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值