小建议
做PAT的时候每次四题 (三小时)一起做
1005 Spell It Right
分析
基础题
代码
//
// main.cpp
// PAT-testcpp
//
// Created by hwl on 2021/1/14.
//
#include<bits/stdc++.h>
using namespace std;
int main()
{
string mat[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
string n;
cin>>n;
int ans=0;
for(int i=0;i<n.size();i++)
{
ans+=n[i]-'0';
}
string tmp=to_string(ans);
cout<<mat[(tmp[0]-'0')];
for(int i=1;i<tmp.size();i++)
cout<<" "<<mat[tmp[i]-'0'];
return 0;
}
1006 Sign In and Sign Out
分析
基础题
代码
//
// main.cpp
// PAT-testcpp
//
// Created by hwl on 2021/1/14.
//
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
map<string,string> m1;
map<string,string> m2;
while(n--)
{
string id,sign_in,sign_out;
cin>>id>>sign_in>>sign_out;
m1[sign_in]=id;
m2[sign_out]=id;
}
map<string,string>::iterator it = m2.end();
it--;
cout<<m1.begin()->second<<" "<<it->second<<endl;
return 0;
}
//这题用最基础的方法就是用四个变量维护最小值即可
1007 Maximum Subsequence Sum
分析
这种类型的题很经典,可作为模板记住,即:最大连续子数组之和
解决这个问题的算法是Kadane算法
这个算法的核心是维护了相应的变量使时间复杂度降为O(n)
刚接触的时候会觉得这个算法有多么巧妙,自己不可能想到之类的,其实熟能生巧,多做几遍就好了(建议作为模板记下来)
这里有个理解Kadane算法的传送🚪:Kadane算法通俗理解
代码
//
// main.cpp
// PAT-testcpp
//
// Created by hwl on 2021/1/14.
//
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int> v(n);
for(int i=0;i<n;i++)
{
cin>>v[i];
}
int maxsum,maxi,maxj;
int sum,i;
i = 0;sum=0;
maxi = 0;maxj = n-1;
maxsum = -1;
for(int k=0;k<n;k++)
{
sum+=v[k];
if(sum<0)
{
i = k+1;
sum = 0;
}
else{
if(sum>maxsum)
{
maxsum = sum;
maxi = i;
maxj = k;
}
}
}
if(maxsum<0) maxsum = 0;
cout<<maxsum<<" "<<v[maxi]<<" "<<v[maxj]<<endl;
return 0;
}
1008 Elevator
分析
基础题,你随便咋整,能做对就好
代码
//
// main.cpp
// PAT-testcpp
//
// Created by hwl on 2021/1/14.
//
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
vector<int> v(n+1);
v[0]=0;
cin>>n;
for(int i=1;i<=n;i++)
cin>>v[i];
vector<int> v1(n);
for(int i=0;i<n;i++)
v1[i]=v[i]-v[i+1];
int num6 = 0;
int num4 = 0;
for(int i=0;i<n;i++)
if(v1[i]<0)
num6+=abs(v1[i]);
else if(v1[i]>0)
num4+=abs(v1[i]);
cout<<num6*6+num4*4+n*5<<endl;
return 0;
}