2 条题解
-
5
最初的想法:
#include<cstdio> #include<algorithm> using namespace std; struct number{ long long num; int times; } n[10000]; bool cmp(number a, number b){ return a.num<b.num; } int main(){ int m, ni=0; scanf("%d", &m); for(int i=0; i<m; i++){ long long t; scanf("%lld", &t); bool flag=1; for(int j=0; j<=ni; j++){ if(n[j].num == t){ n[j].times++; flag = 0; break; } } if(flag){ n[ni].num = t; n[ni].times++; ni++; } } sort(n, n+ni, cmp); for(int i=0; i<ni; i++){ printf("%lld %d\n", n[i].num, n[i].times); } return 0; }
结果:
70 Time Exceeded
o(╥﹏╥)o
然后,,问了下《文心一言》(由于某些原因,超链接已被删除。。)
给出的代码和我上面的类似,但是使用了两种………………(
难以形容)的数据结构:map、vector二者的功能大致如下(你猜484我自己写的??【100%不是!!!】):
map
和vector
都是C++标准模板库(STL)中的容器,它们分别提供了不同的功能和特性。vector
是一个动态数组,支持随机访问、插入、删除和查找等操作。它在内存中以连续的方式存储元素,这意味着可以通过索引直接访问任何元素。vector
在需要更多空间时会自动扩展其容量,通常是按指数方式增长。vector
提供了高效的随机访问操作,但插入和删除操作可能会导致元素移动,因此在某些情况下可能效率较低。map
是一个关联容器,以键值对的形式存储元素。每个元素都由一个键和一个值组成,键在map
中是唯一的。map
按照键的顺序进行排序,并提供快速的查找操作。它底层通常实现为红黑树,这是一种自平衡的二叉搜索树,能够在插入、删除和查找操作中保持对数时间复杂度。map
适用于需要根据键快速查找或操作对应值的情况。- 以下是
vector
和map
的定义示例:
#include <vector> #include <map> // 定义一个vector<int>,存储整数 std::vector<int> vec; // 定义一个map<string, int>,键为字符串,值为整数 std::map<std::string, int> map;
- 总的来说,
vector
适用于需要随机访问和动态扩展数组的情况,而map
适用于需要根据键快速查找或操作对应值的情况。
修改后的代码:
#include<cstdio> #include<map> #include<vector> #include<algorithm> using namespace std; map<int, int> x; //存储数字出现次数 vector<pair<int, int>> n; //排序需要 int main(){ int m; scanf("%d", &m); for(int i=0; i<m; i++){ int t; scanf("%d", &t); x[t]++; //x 中键为 t 的值 自增 1 } for(auto i=x.begin(); i!=x.end(); i++){ n.push_back(*i); //将 map 的数据转存入 vector 中 } /* 文心一言给出的代码为: for(auto& p : x){ n.push_back(p); //将 map 的数据转存入 vector 中 } P.S. 2022 CSP-j 第一轮的噩梦。。 */ sort(n.begin(), n.end()); //按照从小到大的顺序进行排序 for(auto i=n.begin(); i!=n.end(); i++){ printf("%d %d\n", i->first, i->second); //输出 排序后的值(->first、->second 分别对应pair两项) } /* 文心一言给出的代码为: for(auto& p : n){ printf("%d %d\n", p.first, p.second); } */ return 0; }
100 Accepted
-
2
我这代码是怎么把数据水过去的???
#include <bits/stdc++.h> using namespace std; long long a[1000000],n,num=1; int main() { scanf("%lld",&n); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); sort(a+1,a+n+1); cout<<a[1]<<" "; for(int i=2;i<=n;i++) { if(a[i]!=a[i-1]) { cout<<num<<endl; cout<<a[i]<<" "; num=1; } else num++; } cout<<num; return 0; }
- 1
信息
- ID
- 159
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 7
- 标签
- 递交数
- 81
- 已通过
- 18
- 上传者