1. 知识点总结
本次模拟涉及到的知识点有:
- 字符串处理
- 排序+结构体
题号 | 难度 | 知识点 |
---|---|---|
1152 | 🐸 | 字符串的处理+基础数学 |
1153 | 🐸 | 排序+字符串处理+结构体(比较繁琐) |
1154 | 🕊写过,暂时咕咕~ | |
1155 | 🕊写过,暂时咕咕~ |
2. 分题题解
2.1 第一题:PTA甲级1152
基本的字符串处理:
- substr的使用
- stoi的转化
- isPrime()素数判断
#include<bits/stdc++.h>
using namespace std;
int L,k;
string str;
bool isPrime(int x){
if(x==0||x==1)return false;
if(x==2||x==3||x==5||x==7)return true;
for(int i=2;i*i<=x;i++){
if(x%i==0)return false;
}
return true;
}
int main(){
scanf("%d%d",&L,&k);
cin>>str;
int num=-1;
int i;
bool flag=false;
for(i=0;i<=L-k;i++){
num=stoi(str.substr(i,k));
if(isPrime(num)){
flag=true;
break;
}
}
if(!flag){
printf("404");
}else{
cout<<str.substr(i,k);
}
return 0;
}
2.2 第二题:PTA甲级1153
结构体+排序+字符串处理
基础题,注意每一种情况如果查询结果为0都有
NA
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct Player{
string cardid;
int score;
int site;
int yy;
int mm;
int dd;
int number;
};
vector<Player>player;
int type;
string term;
string cardid;
int score;
bool cmp1(Player a,Player b){
if(a.score!=b.score){
return a.score>b.score;
}else{
return a.cardid<b.cardid;
}
}
struct Ans3{
int site;
int Nt=0;
};
bool cmp3(Ans3 a,Ans3 b){
if(a.Nt!=b.Nt){
return a.Nt>b.Nt;
}else{
return a.site<b.site;
}
}
char sign;
int main(){
scanf("%d%d",&n,&m);
player.resize(n);
for(int i=0;i<n;i++){
cin>>cardid>>score;
player[i].cardid=cardid;
player[i].score=score;
player[i].site=stoi(cardid.substr(1,3));
player[i].yy=stoi(cardid.substr(4,2));
player[i].mm=stoi(cardid.substr(6,2));
player[i].dd=stoi(cardid.substr(8,2));
player[i].number=stoi(cardid.substr(10,3));
//打印
// printf("处理后的结果:");
// printf("%d %d %d %d %d \n",player[i].site,player[i].yy,player[i].mm,player[i].dd,player[i].number);
}
sort(player.begin(),player.end(),cmp1);
for(int i=1;i<=m;i++){
cin>>type>>term;
cout<<"Case "<<i<<":"<<" "<<type<<" "<<term<<endl;
if(type==1){
bool flag=false;
for(int i=0;i<n;i++){
if(term=="A")sign='A';
else if(term=="B")sign='B';
else sign='T';
if(player[i].cardid[0]==sign){
flag=true;
cout<<player[i].cardid<<" "<<player[i].score<<endl;
}
}
if(!flag)printf("NA\n");
}else if(type==2){
int Nt=0,Ns=0;
int site=stoi(term);
for(int i=0;i<n;i++){
if(player[i].site==site){
Nt++;
Ns+=player[i].score;
}
}
if(Nt==0){
printf("NA\n");
}else{
printf("%d %d\n",Nt,Ns);
}
}else{
//site 个数
int day=stoi(term.substr(4,2));
int year=stoi(term.substr(0,2));
int month=stoi(term.substr(2,2));
vector<Ans3>ans3(1000);
for(int i=0;i<n;i++){
if(player[i].dd==day&&player[i].mm==month&&player[i].yy==year){
ans3[player[i].site].Nt++;
ans3[player[i].site].site=player[i].site;
}
}
sort(ans3.begin(),ans3.end(),cmp3);
bool flag=false;
for(int i=0;i<n;i++){
if(ans3[i].Nt==0){
break;
}else{
flag=true;
printf("%d %d\n",ans3[i].site,ans3[i].Nt);
}
}
if(!flag){
printf("NA\n");
}
ans3.clear();
}
}
return 0;
}
2.3 第三题:PTA甲级1154
2.4 第四题:PTA甲级1155
3. 参考资料
……