甲级模拟1152-1155


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. 参考资料

……


文章作者: Gao
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Gao !
评论
  目录