部分测试点超时,答案没问题
用cin、cout
又超时了Orz
#include <bits/stdc++.h>
using namespace std;
struct student{
string id;
int score;
};
int n,m,k,cnt=1;
vector<student> s(10000);
bool cmp(student a,student b){
if(a.score!=b.score) return a.score>b.score;
else return a.id<b.id;
}
void type1(string ins)
{
vector<student> a;
char c=ins[0];
for(int i=0;i<n;i++){
if(s[i].id[0]==c){
a.push_back(s[i]);
}
}
if(a.size()!=0){
sort(a.begin(),a.end(),cmp);
for(int i=0;i<a.size();i++)
cout<<a[i].id<<" "<<a[i].score<<endl;
}else cout<<"NA"<<endl;
cnt++;
}
void type2(string ins)
{
vector<int> a(2);
for(int i=0;i<n;i++){
if(s[i].id.substr(1,3)==ins){
a[0]++;a[1]+=s[i].score;
}
}
if(a[0]!=0)
cout<<a[0]<<" "<<a[1]<<endl;
else
cout<<"NA"<<endl;
cnt++;
}
void type3(string ins)
{
vector<student> tmp;
map<string,int> a;
for(int i=0;i<n;i++){
if(s[i].id.substr(4,6)==ins){
a[s[i].id.substr(1,3)]++;
}
}
for(map<string,int>::iterator it=a.begin();it!=a.end();it++){
tmp.push_back({it->first,it->second});
}
if(tmp.size()!=0){
sort(tmp.begin(),tmp.end(),cmp);
for(int i=0;i<tmp.size();i++)
cout<<tmp[i].id<<" "<<tmp[i].score<<endl;
}else cout<<"NA"<<endl;
cnt++;
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif
string ins;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>s[i].id>>s[i].score;
}
while(m--){
cin>>k>>ins;
if(k==1){
cout<<"Case "<<cnt<<": "<<k<<" "<<ins<<endl;
type1(ins);
}else if(k==2){
cout<<"Case "<<cnt<<": "<<k<<" "<<ins<<endl;
type2(ins);
}else{
cout<<"Case "<<cnt<<": "<<k<<" "<<ins<<endl;
type3(ins);
}
}
return 0;
}
AC答案
改成scanf、printf
后就AC了
发现跟柳神思路基本一样,开心~
有个巧合就是cmp函数可以复用,还挺不错的~
当然unordered map还是比map快,但我map也通过了哈哈
#include <bits/stdc++.h>
using namespace std;
struct student{
string id;
int score;
};
int n,m,k,cnt=1;
vector<student> s(10000);
bool cmp(student a,student b){
if(a.score!=b.score) return a.score>b.score;
else return a.id<b.id;
}
void type1(string ins)
{
vector<student> a;
char c=ins[0];
for(int i=0;i<n;i++){
if(s[i].id[0]==c){
a.push_back(s[i]);
}
}
if(a.size()!=0){
sort(a.begin(),a.end(),cmp);
for(int i=0;i<a.size();i++)
printf("%s %d\n",a[i].id.c_str(),a[i].score);
}else printf("NA\n");
cnt++;
}
void type2(string ins)
{
vector<int> a(2);
for(int i=0;i<n;i++){
if(s[i].id.substr(1,3)==ins){
a[0]++;a[1]+=s[i].score;
}
}
if(a[0]!=0) printf("%d %d\n",a[0],a[1]);
else
printf("NA\n");
cnt++;
}
void type3(string ins)
{
vector<student> tmp;
map<string,int> a;
for(int i=0;i<n;i++){
if(s[i].id.substr(4,6)==ins){
a[s[i].id.substr(1,3)]++;
}
}
for(map<string,int>::iterator it=a.begin();it!=a.end();it++){
tmp.push_back({it->first,it->second});
}
if(tmp.size()!=0){
sort(tmp.begin(),tmp.end(),cmp);
for(int i=0;i<tmp.size();i++)
printf("%s %d\n",tmp[i].id.c_str(),tmp[i].score);
}else printf("NA\n");
cnt++;
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif
string ins;
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++){
cin>>s[i].id>>s[i].score;
}
while(m--){
cin>>k>>ins;
if(k==1){
printf("Case %d: %d %s\n",cnt,k,ins.c_str());
type1(ins);
}else if(k==2){
printf("Case %d: %d %s\n",cnt,k,ins.c_str());
type2(ins);
}else{
printf("Case %d: %d %s\n",cnt,k,ins.c_str());
type3(ins);
}
}
return 0;
}
PAT乙级完结撒花~~~
从2021-8-1
到2021-10-20
,快3个月的时间吧,当然也不是每天都刷题,还要做些别的事情+玩:)
有些题还是没有完全消化,还会再复习哒~
总体感受就是编程能力稍微有些提升,对C++的STL更为熟练,逻辑思维也有所提高。
还有最重要的是,感受到了坚持的力量!!非常有成就感呀!
接下来,继续努力!!!
以后甲级刷题记录在这里啦甲级记录地址