1 条题解

  • 0
    @ 2025-8-24 21:16:36

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Igallta
    「この世には愛も知らない人が 沢山いるんですよ」

    搬运于2025-08-24 21:16:35,当前版本为作者最后更新于2024-09-03 14:09:49,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题意

    算出每个数的后 pp 位,看有多少个不同。

    思路

    “看有多少个不同”可以直接想到“集合”,可能有朋友不知道“集合”是什么,“集合”是一个元素不可重复的东西。

    在这里可以直接使用头文件 <set> 里的 set(集合)这个集合还会帮你排序(默认从小到大)如果你不想让它排序,你也可以使用 unordered_set

    对于集合的定义:

    set<int>st;//定义一个集合,名字叫 st
    

    这里先输入,在输入的时候就把这个数的后 pp 位放入集合中。

    cin>>n>>t;
    for(int i=1;i<=n;i++){
    	cin>>x;
    	int k=(x%((int)pow(10,t)));//后 t 位
    	st.insert(k);//放入集合
    }
    

    最后,我们只需要输出当前这个集合存储了多少个数就可以了。

    cout<<st.size();
    

    扩展知识

    这部分已经脱离题目了,而且只针对于学过指针的朋友。

    集合 set 无法使用下标访问,只能使用指针set::iterator)但这个太难打了怎么办呢?C++ 11 给我们提供了 auto,它可以替代 set::iterator 进行遍历。

    比如我要遍历集合 stst,并输出 stst 里的内容,我可以这样写:

    for(auto v:st){
    	cout<<v<<' ';
    }
    
    • 1

    信息

    ID
    10605
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者