pat a 1153
作者:互联网
这道题我一开始做的非常复杂,我想在读入数据时就先把他们按照三种情况做一下预处理,所以导致了结构非常复杂,甚至用了map里面还套一个map映射,然后喜闻乐见超时了,将cout做了一下代换还得到了答案错误。
不过今天读了一下柳神说的话,我想自己如果写的太复杂,那确实不好进行检查,有些东西该简化还是需要简化的,多想想,多看看别人的代码。(好希望pat能开放测试点的数据,有时候我自己查实在查不到呀QAQ)看懂了柳神的思路后,写下来也很顺,确实比我自己写时像挤牙膏一样好多了,不过那些答案错误,我暂时先放在那里,以后再找吧。
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <unordered_map>
using namespace std;
struct node{
string id;
int gra;
};
vector<node> ans;
bool cmp(node a,node b){
if(a.gra!=b.gra){
return a.gra>b.gra;
}else{
return a.id<b.id;
}
}
int main(){
int n,m;
scanf("%d %d",&n,&m);
vector<node> list(n);
for(int i=0;i<n;i++){
cin>>list[i].id>>list[i].gra;
}
for(int i=1;i<=m;i++){
ans.clear();
int num;
string s;
cin>>num>>s;
int cnt=0,sum=0;
printf("Case %d: %d %s\n",i,num,s.c_str());
if(num==1){
for(int j=0;j<n;j++){
if(list[j].id[0]==s[0]){
ans.push_back(list[j]);
}
}
}else if(num==2){
for(int j=0;j<n;j++){
if(list[j].id.substr(1,3)==s){
cnt++;
sum=sum+list[j].gra;
}
}
if(cnt!=0){
printf("%d %d\n",cnt,sum);
}
}else if(num==3){
unordered_map<string,int> mp;
for(int j=0;j<n;j++){
if(list[j].id.substr(4,6)==s){
mp[list[j].id.substr(1,3)]++;
}
}
for(auto it=mp.begin();it!=mp.end();it++){
ans.push_back(node{it->first,it->second});
}
}
sort(ans.begin(),ans.end(),cmp);
for(int j=0;j<ans.size();j++){
printf("%s %d\n",ans[j].id.c_str(),ans[j].gra);
}
if(((num==1||num==3)&&ans.size()==0)||num==2&&cnt==0){
printf("NA\n");
}
}
return 0;
}
原先的
#include <iostream>
#include <unordered_map>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
struct node{
string id;
int gra;
};
struct type2{
int cnt=0;
int total=0;
};
struct type3{
string sitename;
int cnt=0;
};
vector<node> A,B,T;
vector<type3> out;
unordered_map<string,type2> mp1;
unordered_map<string,unordered_map<string,int>> mp2;
bool cmp1(node a,node b){
if(a.gra!=b.gra){
return a.gra>b.gra;
}else{
return a.id<b.id;
}
}
bool cmp2(type3 a,type3 b){
if(a.cnt!=b.cnt){
return a.cnt>b.cnt;
}else{
return a.sitename<b.sitename;
}
}
int main(){
int n,m;
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++){
node temp;
cin>>temp.id>>temp.gra;
if(temp.id[0]=='A'){
A.push_back(temp);
}else if(temp.id[0]=='B'){
B.push_back(temp);
}else{
T.push_back(temp);
}
string site=temp.id.substr(1,3);
mp1[site].cnt++;
mp1[site].total+=temp.gra;
string date=temp.id.substr(4,6);
mp2[date][site]++;
}
for(int i=1;i<=m;i++){
int type;
cin>>type;
if(type==1){
char c;
getchar();
scanf("%c",&c);
printf("Case %d: %d %c\n",i,type,c);
if(c=='A'){
if(A.size()==0){
printf("NA\n");
}else{
sort(A.begin(),A.end(),cmp1);
for(int j=0;j<A.size();j++){
printf("%s %d\n",A[j].id.c_str(),A[j].gra);
}
}
}else if(c=='B'){
if(B.size()==0){
printf("NA\n");
}else{
sort(B.begin(),B.end(),cmp1);
for(int j=0;j<B.size();j++){
printf("%s %d\n",B[j].id.c_str(),B[j].gra);
}
}
}else{
if(T.size()==0){
printf("NA\n");
}else{
sort(T.begin(),T.end(),cmp1);
for(int j=0;j<T.size();j++){
printf("%s %d\n",T[j].id.c_str(),T[j].gra);
}
}
}
}else if(type==2){
string ci;
cin>>ci;
printf("Case %d: %d %s\n",i,type,ci.c_str());
if(mp1[ci].cnt==0){
printf("NA\n");
}else{
printf("%d %d\n",mp1[ci].cnt,mp1[ci].total);
}
}else{
string da;
cin>>da;
printf("Case %d: %d %s\n",i,type,da.c_str());
for(auto it=mp2[da].begin();it!=mp2[da].end();it++){
type3 t;
t.sitename=it->first;
t.cnt=it->second;
out.push_back(t);
}
if(out.size()==0){
printf("NA\n");
}else{
sort(out.begin(),out.end(),cmp2);
for(int j=0;j<out.size();j++){
printf("%s %d\n",out[j].sitename.c_str(),out[j].cnt);
}
}
}
}
return 0;
}
blxl313
发布了57 篇原创文章 · 获赞 0 · 访问量 887
私信
关注
标签:pat,temp,int,1153,else,gra,include,id 来源: https://blog.csdn.net/blxl313/article/details/104185915