题目描述
- 结构体内重载小于号
-
map内二维排序:
-
(1)放到vector《Node》里,结构体内重载小于号
-
(2)vector[HTML_REMOVED] > pair按第一个递增排,相同则按第二个递增。实现递减:取负
-
printf(“%s”,str.c_str());
样例
#include<bits/stdc++.h>
using namespace std;
const int N =1e4+10;
int n,m;
struct Node
{
string id;
int grade;
bool operator< (const Node &t) const
{
if(grade!=t.grade) return grade>t.grade;
return id<t.id;
}
}stu[N];
int main()
{
freopen("1.txt","r",stdin);
cin>>n>>m;
string str;
for(int i=0;i<n;i++)
cin>>stu[i].id>>stu[i].grade;
for(int i=1;i<=m;i++)
{
vector<Node> v;unordered_map<string,int> mp;
int type;cin>>type>>str;
printf("Case %d: %d %s\n",i,type,str.c_str());
if(type==1)
{
for(int i=0;i<n;i++)
{
if(stu[i].id[0]==str[0]) v.push_back(stu[i]);
}
}else if(type==2)
{
int cnt=0,sum=0;
for(int i=0;i<n;i++)
{
if(stu[i].id.substr(1,3)==str)
{
cnt++;
sum+=stu[i].grade;
}
}
if(cnt)
{
printf("%d %d\n",cnt,sum);
continue;
}else
{
puts("NA");continue;
}
}
else
{
for(int i=0;i<n;i++)
if(stu[i].id.substr(4,6)==str)
mp[stu[i].id.substr(1,3)]++;
for(auto c:mp) v.push_back({c.first,c.second});
}
sort(v.begin(),v.end());
if(v.size()==0) puts("NA");
else
for(auto c:v) printf("%s %d\n",c.id.c_str(),c.grade);
}
return 0;
}
算法1
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla