PAT 1081 Rational Sum
链接:http://www.patest.cn/contests/pat-a-practise/1081
代码:注意有总和为零的情况,此时要输出“0”
#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<set>
#include<cmath>
#include<algorithm>
using namespace std;
long long gcd(long long x,long long b)
{
long long c;
for(;b!=0;)
{
c=x%b;
x=b;
b=c;
}
return x;
}
int main()
{
int n;
long long a,b,c,d,e;
scanf("%lld",&n);
scanf("%lld/%lld",&a,&b);
for(int i=1;i<n;++i)
{
scanf("%lld/%lld",&c,&d);
e=gcd(b,d);
e=b/e*d;
a=a*(e/b);
c=c*(e/d);
a=a+c;
b=e;
}
long long f=a/b;
a=a%b;
if(f!=0||a==0)
{
printf("%lld",f);
}
if(a!=0)
{
c=gcd(a,b);
if(f==0)
printf("%lld/%lld",a/c,b/c);
else
printf(" %lld/%lld",a/c,b/c);
}
printf("\n");
return 0;
}
PAT 1082 Read Number in Chinese
链接:http://www.patest.cn/contests/pat-a-practise/1082
代码:
#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<vector>
#include<set>
#include<cmath>
#include<algorithm>
using namespace std;
string d[11]= {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
string q[11]= {"", "Shi", "Bai", "Qian", "Wan", "Shi", "Bai", "Qian", "Yi"};
vector<int> res;
vector<string> ans;
int main()
{
int n;
scanf("%d",&n);
if(n==0)
{
printf("ling\n");
}
else
{
int len=0;
if(n<0)
{
printf("Fu ");
n=-n;
}
for(; n>0; n/=10)
{
res.push_back(n%10);
}
for(; len<res.size()&&res[len]==0; ++len);
if(len<8)
{
for(int i=len; i<res.size(); ++i)
{
if(i!=0&&(res[i]!=0||i%4==0))
{
ans.push_back(q[i]);
}
ans.push_back(d[res[i]]);
}
for(int i=ans.size()-1,j; i>=0; --i)
{
j=0;
if(i!=ans.size()-1)
printf(" ");
for(; i>=0&&ans[i]=="ling"; --i,++j);
if(j>0&&ans[i]!="Wan")
printf("ling ");
printf("%s",ans[i].c_str());
}
printf("\n");
}
else
{
printf("%s Yi\n",d[res[len]].c_str());
}
}
return 0;
}
PAT 1083 List Grades
链接:http://www.patest.cn/contests/pat-a-practise/1083
代码:
#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<vector>
#include<set>
#include<cmath>
#include<algorithm>
using namespace std;
struct student
{
char name[15];
char id[15];
int grade;
} stu[100005];
bool cmp(const struct student &a,const struct student &b)
{
return a.grade<b.grade;
}
int main()
{
int n,a,b;
int maxGrade=-1,minGrade=999;
scanf("%d",&n);
for(int i=0; i<n; ++i)
{
scanf("%s %s %d",stu[i].name,stu[i].id,&stu[i].grade);
if(stu[i].grade>maxGrade) maxGrade=stu[i].grade;
if(stu[i].grade<minGrade) minGrade=stu[i].grade;
}
sort(stu,stu+n,cmp);
scanf("%d%d",&a,&b);
if(a>b)
{
a=a^b;
b=a^b;
a=a^b;
}
if(b<minGrade||a>maxGrade)
{
printf("NONE\n");
}
else
{
int idxA=0;
int idxB=n-1;
for(;idxA<n&&stu[idxA].grade<a;++idxA);
for(;idxB>=0&&stu[idxB].grade>b;--idxB);
//printf("%d\n",idxB-idxA+1);
for(int i=idxB;i>=idxA;--i)
printf("%s %s\n",stu[i].name,stu[i].id);
}
return 0;
}
PAT 1086 Tree Traversals Again
链接:http://www.patest.cn/contests/pat-a-practise/1086
代码:
#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<vector>
#include<set>
#include<stack>
#include<cmath>
#include<algorithm>
using namespace std;
struct point
{
int sons[2];
} node[35];
bool first=true;
int n,m,root;
void postorder(int idx)
{
for(int i=0; i<2; ++i)
if(node[idx].sons[i]!=-1)
postorder(node[idx].sons[i]);
if(first)
{
printf("%d",idx);
first=false;
}
else
printf(" %d",idx);
}
int inorder()
{
int id=-1;
char s[10];
if(m<2*n)
{
scanf("%s",s);
if(strcmp(s,"Push")==0)
{
scanf("%d",&id);
if(m==0) root=id;
++m;
}
else
{
++m;
return -1;
}
node[id].sons[0]=inorder();
node[id].sons[1]=inorder();
}
return id;
}
int main()
{
m=0;
scanf("%d",&n);
for(int i=1; i<=n; ++i)
{
node[i].sons[0]=node[i].sons[1]=-1;
}
inorder();
postorder(root);
return 0;
}
PAT 1087 All Roads Lead to Rome
链接:http://www.patest.cn/contests/pat-a-practise/1087
代码:
#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<algorithm>
using namespace std;
struct road
{
vector<int> path;
int costSum;
int happinessSum;
}tmp;
map<int,string> idToName;
map<string,int> nameToId;
map<int,int> idToHappiness;
vector<int> path;
vector<struct road> ans;
bool visited[205];
int mapx[205][205];
int n;
void dfs(int st,int ed,int costSum,int happiniessSum)
{
if(st==ed)
{
tmp.path.clear();
int len=path.size();
for(int i=0;i<len;++i)
tmp.path.push_back(path[i]);
tmp.costSum=costSum;
tmp.happinessSum=happiniessSum;
ans.push_back(tmp);
return;
}
for(int i=0;i<n;++i)
{
if(mapx[st][i]>0&&(!visited[i]))
{
path.push_back(i);
costSum+=mapx[st][i];
happiniessSum+=idToHappiness[i];
visited[i]=true;
dfs(i,ed,costSum,happiniessSum);
visited[i]=false;
costSum-=mapx[st][i];
happiniessSum-=idToHappiness[i];
path.pop_back();
}
}
}
bool cmp(const struct road &a,const struct road &b)
{
return a.costSum!=b.costSum?(a.costSum<b.costSum):(a.happinessSum!=b.happinessSum?(a.happinessSum>b.happinessSum):(a.happinessSum/(double)(a.path.size()-1)>b.happinessSum/(double)(b.path.size()-1)));
}
int main()
{
int k,a,endCity;
char c[15],s[15];
scanf("%d%d%s",&n,&k,c);
idToName.insert(make_pair(0,string(c)));
nameToId.insert(make_pair(string(c),0));
idToHappiness.insert(make_pair(0,0));
for(int i=1; i<n; ++i)
{
scanf("%s%d",c,&a);
idToName.insert(make_pair(i,string(c)));
nameToId.insert(make_pair(string(c),i));
idToHappiness.insert(make_pair(i,a));
if(strcmp(c,"ROM")==0) endCity=i;
}
memset(mapx,0,sizeof(mapx));
for(int i=0,ida,idb;i<k;++i)
{
scanf("%s%s%d",c,s,&a);
ida=nameToId[string(c)];
idb=nameToId[string(s)];
mapx[ida][idb]=mapx[idb][ida]=a;
}
memset(visited,false,sizeof(visited));
path.push_back(0);
visited[0]=true;
dfs(0,endCity,0,0);
sort(ans.begin(),ans.end(),cmp);
int out=ans[0].costSum,countx=1;
for(;out==ans[countx].costSum;++countx);
printf("%d %d %d %d\n",countx,ans[0].costSum,ans[0].happinessSum,(int)(ans[0].happinessSum/(double)(ans[0].path.size()-1)));
printf("%s",idToName[ans[0].path[0]].c_str());
for(int i=1;i<ans[0].path.size();++i)
printf("->%s",idToName[ans[0].path[i]].c_str());
printf("\n");
return 0;
}