当前位置: 代码迷 >> 综合 >> PAT 甲级 1039 PAT Ranking 个人错误总结
  详细解决方案

PAT 甲级 1039 PAT Ranking 个人错误总结

热度:17   发布时间:2024-01-29 01:02:19.0

这题有点卡,思路一开始就是对的,就是卡了最后一个点。
因为我用的getchar读数,竟然导致了爆栈,问题是我不知道这样算有问题,我至今还不太能理解为什么,明明每次调用函数就只用了4次getchar。。用完就return了,理论上栈顶多就占那4个空。
ac代码

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<vector>
using namespace std;
int hashc(char a[]){int n=0;for(int i=0;i<3;i++){n=n*26+(a[i]-'A');}n=n*10+(a[3]-'0');return n;
} 
void printn(int n){char a[5]={};a[0]=n%10+'0';
// putchar(a[0]);n/=10;for(int i=0;i<3;i++){a[i+1]=n%26+'A';n/=26;}reverse(a,a+4);printf("%s",a);
}vector<int > stu[180000];
int main(){int n,k,c,m;char str[5];int step;scanf("%d %d",&n,&k);for(int i=0;i<k;i++){scanf("%d %d",&c,&m);for(int j=0;j<m;j++){scanf("%s",&str);step=hashc(str);stu[step].push_back(c);	}}int size;for(int i=0;i<n;i++){scanf("%s",&str);step=hashc(str);size=stu[step].size();sort(stu[step].begin(),stu[step].end());printn(step);printf(" %d",size);for(int j=0;j<size;j++){printf(" %d",stu[step][j]);}printf("\n");}return 0;
}