#include<stdio.h>
#include<string.h> int main(){
float w[];
float t[];
float l[];
char a[];
float x[];
int i;
float sum;
memset(w,,sizeof(w));
memset(t,,sizeof(w));
memset(l,,sizeof(w)); for(i=;i<;i++){
scanf("%f %f %f",&w[i],&t[i],&l[i]);
} for(i=;i<;i++){
//x[i]=max(w[i],t[i],l[i]);
if(w[i]>t[i]&&w[i]>l[i]){
x[i]=w[i];
a[i]='W';
}
else if(t[i]>l[i]){
x[i]=t[i];
a[i]='T';
}
else{
x[i]=l[i];
a[i]='L';
}
}
sum=(x[]*x[]*x[]*0.65-)*;
printf("%c %c %c %.2f",a[],a[],a[],sum);
return ;
}

也是非常简单的一道题,没什么好说的

1012(重要!!)

 #include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
using namespace std;
struct stu{
int id;
int c;
int m;
int e;
int a;
char br;
int rank;
};
bool cmpbyA(stu A,stu B){
return A.a>B.a;
}
bool cmpbyC(stu A,stu B){
return A.c>B.c;
}
bool cmpbyM(stu A,stu B){
return A.m>B.m;
}
bool cmpbyE(stu A,stu B){
return A.e>B.e;
}
int main(){
int i,j;
int n1,n2;
int t;
int score,r;
vector<stu> v;
freopen("in2.txt","r",stdin);
scanf("%d %d",&n1,&n2);
for(i=;i<n1;i++){
stu s;
scanf("%d %d %d %d",&(s.id),&(s.c),&(s.m),&(s.e));
s.a=(s.c+s.m+s.e)/;
v.push_back(s);
}
score=-;
r=;
sort(v.begin(),v.end(),cmpbyA);
for(i=;i<v.size();i++){
if(v[i].a!=score)
r=i+;
score=v[i].a;
v[i].rank=r;
v[i].br='A';
}
sort(v.begin(),v.end(),cmpbyC);
for(i=;i<v.size();i++){
if(v[i].c!=score)
r=i+;
score=v[i].c;
if(v[i].rank>r){
v[i].rank=r;
v[i].br='C';
}
}
sort(v.begin(),v.end(),cmpbyM);
for(i=;i<v.size();i++){
if(v[i].m!=score)
r=i+;
score=v[i].m;
if(v[i].rank>r){
v[i].rank=r;
v[i].br='M';
}
}
sort(v.begin(),v.end(),cmpbyE);
for(i=;i<v.size();i++){
if(v[i].e!=score)
r=i+;
score=v[i].e;
if(v[i].rank>r){
v[i].rank=r;
v[i].br='E';
}
}
for(i=;i<n2;i++){
scanf("%d",&t);
for(j=;j<n1;j++){
if(t==v[j].id){
printf("%d %c\n",v[j].rank,v[j].br);
break;
}
else if(t!=v[j].id&&j==n1-)
printf("N/A\n");
}
}
return ;
}

教科书一般的代码,从这个代码可以学到很多:

c++中vector容器的应用,使用此容器,直接将结构体装入容器内,直接利用vector本身的函数就可以非常方便的进行排序、计算大小等。

注意排名时候的名词并列的情况,本程序提供了一个非常优秀的处理方案,一定要学会使用。

 #include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std; vector<int> v[];
int t[];
int cend[];
int n,m,k,q;
int main(){
int i,j;
int s,f;
freopen("in.txt","r",stdin);
memset(t,,sizeof(t));
memset(cend,,sizeof(cend));
for(i=;i<;i++){
v[i].clear();
}
scanf("%d%d%d%d",&n,&m,&k,&q);
for(i=;i<=k;i++){
scanf("%d",&t[i]);
}
j=;
for(i=;i<=n*m;i++){
v[j].push_back(i);
if(i<=n) cend[i]=t[i];
else cend[i]=cend[i-n]+t[i];
if(j!=n-) j++;
else j=;
} for(i=n*m+;i<=k;i++){
int min=;
for(j=;j<n;j++){
if(cend[v[j].front()]<min){
min=cend[v[j].front()];
s=j;
}
}
cend[i]=cend[v[s].back()]+t[i]; v[s].erase(v[s].begin());
v[s].push_back(i);
}
for(i=;i<q;i++){
scanf("%d",&f);
if((cend[f]-t[f])>*) printf("Sorry\n");
else{
printf("%02d:%02d\n",cend[f]/+,cend[f]%);
}
}
return ;
}

利用上次学会的vector容器可以非常方便的解决这个问题。本质就是一个队列问题。

刚开始还是没有思路,虽然知道是个队列但是无法下手,后来参考大神的代码明白了要将整个队伍分成两部分考虑,一部分是黄线内的,他们的时间可以直接根据队伍确定,另一部分是黄线外,就必须要通过队列的出入时间来确定。理清这个思路,代码就其实比较容易实现。

提交的时候遇到了几个问题,一个是我的变量命名,不要和vector方法重名,比如说end,以后代码中要注意;另一个是这道题的一个细节,之前没有把题意弄清,一定要注意最后的判断条件,本题容易出错的地方:是在17:00及以后开始服务的客户输出"Sorry",而不是17:00之前结束服务的输出"Sorry";如客户cId是16:59开始服务,服务时间为2,则输出的应该是17:01,而不是"Sorry"。这些都查好改过以后,就AC了。

 #include<stdio.h>
#include<string.h>
#include<math.h>
bool isp(int x)
{
if(x<)
return false;
if(x==||x==)
return true;
for(int i=;i*i<=x;i++)
{
if(x%i==)
return false;
}
return true;
}
int main(){
int n,d;
char r[];
int i,k,sum;
freopen("in.txt","r",stdin);
while(scanf("%d",&n)!=EOF){
if(n<)
break;
scanf("%d",&d);
if(isp(n)){
memset(r,'\0',sizeof(r));
i=;
sum=;
while(n!=){
r[i]=n%d+'';
n=n/d;
i++;
}
k=;
for(i=strlen(r)-;i>=;i--){
sum+=(r[i]-'')*k;
k*=d;
}
if(isp(sum))
printf("Yes\n");
else
printf("No\n");
}
else
printf("No\n"); }
return ;
}

还算是自己有思路的一道题,基本不用任何参考自己做了出来,就是有点小问题,一定要注意到原来的数字也要是质数!

还有对于质数的判断,这道题的方法就作为参考,以后的质数都这样来判断。

我自己的方法是将每一位都转化为为字符串来处理,还算是比较简单。

还有一种比较好的(高端)方法是利用队列,关键代码如下:

 if(isPrime(n))
{
queue<int>q;
while(n!=)
{
q.push(n%d);
n=n/d;
}
int reverse=;
while(!q.empty())
{
reverse=reverse*d;
reverse=reverse+q.front();
q.pop();
}
if(isPrime(reverse))
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}

其实吧。。思路都一样

 #include<stdio.h>
#include<string.h> int main(){
int n,b;
int i,j;
int c[];
scanf("%d %d",&n,&b);
if(n==){
printf("Yes\n0");
return ;
}
//memset(c,'\0',sizeof(c));
i=;
while(n!=){
c[i]=n%b;
n=n/b;
i++;
}
int l=i;
int flag=;
for(i=,j=l-;i<j;i++,j--){
if(c[i]!=c[j]){
flag=;
break;
}
}
if(flag==)
printf("No\n");
else
printf("Yes\n");
for(i=l-;i>=;i--)
printf(i==?"%d\n":"%d ",c[i]); return ;
}

其实是一道很简单的题,关键就是十进制的转换。转换之后的储存。利用最简单的int数组就可以了,完全不需要其他容器或是我自己用的char数组的辅助就可以解决。希望给自己一个启示,以后不要把这种题目给复杂化了。

还有一点是这种对称的题的判断,从两头一起移动判断最合适,结束条件为i<j即可。

 #include<stdio.h>
#include<string.h>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
struct node{
int n;
node *left;
node *right;
};
queue<node *> q;
vector<int> v;
node* buildtree(int *a,int *b,int n){
if(n<=) return NULL;
node *root=(node *)malloc(sizeof(node));
root->left=NULL;
root->right=NULL;
root->n=a[n-];
int i=;
for(i=;i<n;i++){
if(b[i]==a[n-])
break;
}
root->left=buildtree(a,b,i);
root->right=buildtree(a+i,b+i+,n-i-);
return root;
}
void levelorder(node *tree){
if(tree!=NULL) q.push(tree);
while(!q.empty()){
node *t=q.front();
if(t->left!=NULL) q.push(t->left);
if(t->right!=NULL) q.push(t->right);
v.push_back(t->n);
q.pop();
}
}
int main(){
int a[],b[];
int i,n;
freopen("in.txt","r",stdin);
scanf("%d",&n);
for(i=;i<n;i++)
scanf("%d",&a[i]);
for(i=;i<n;i++)
scanf("%d",&b[i]);
node *tree=buildtree(a,b,n);
levelorder(tree);
for(i=;i<n;i++){
printf(i==n-?"%d\n":"%d ",v[i]);
}
return ;
}

第一次接触树的题目,这是一个很经典的题目。包括了树的结构体的定义、树的生成、利用容器实现各种遍历、递归算法的实现。最关键的是遍历的转换,利用两个遍历还原整个二叉树(其中必须有一个是中序遍历)作为一个经典的题目,一定要利用这个题打开树类题目的思路。

A题进行时--浙大PAT 1011-1020的更多相关文章

  1. A题进行时--浙大PAT 1001-1010

    pat链接:http://pat.zju.edu.cn 1 #include<stdio.h> 2 int main(){ 3 int a,b; 4 int c; 5 while(scan ...

  2. A题进行时--浙大PAT 1021-1030

    1021: #include<stdio.h> #include<string.h> #include<vector> #include<queue> ...

  3. 浙大pat 1011题解

    With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...

  4. PAT(B) 1020 月饼(Java)

    题目链接:1020 月饼 (25 point(s)) 分析 将月饼(库存量,总售价,单价)封装成MoonCake类 Scanner会超时,用BufferedReader类读取数据 读取的时候用字符串数 ...

  5. 浙大PAT CCCC L3-013 非常弹的球 ( 高中物理题 )

    题目链接 题意 : 刚上高一的森森为了学好物理,买了一个“非常弹”的球.虽然说是非常弹的球,其实也就是一般的弹力球而已.森森玩了一会儿弹力球后突然想到,假如他在地上用力弹球,球最远能弹到多远去呢?他不 ...

  6. 浙大 PAT 乙级 1001-1075 目录索引

    1001. 害死人不偿命的(3n+1)猜想 1002. 写出这个数 1003. 我要通过! 1004. 成绩排名 1005. 继续(3n+1)猜想 1006. 换个格式输出整数 1007. 素数对猜想 ...

  7. PAT乙级 1020. 月饼 (25)(只得到23分)

    1020. 月饼 (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 月饼是中国人在中秋佳节时吃的一种传统食 ...

  8. PAT Basic 1020

    1020 月饼 (25 分) 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意 ...

  9. PAT 乙级 1020 月饼 (25) C++版

    1020. 月饼 (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 月饼是中国人在中秋佳节时吃的一种传统食 ...

随机推荐

  1. DNS子域委派配置案例[转载]

    最近在研究linux dns 在51上面看见这篇文章,感觉讲的很透彻,随转载,方便以后自己查阅 原文地址:http://www.51osos.com/a/Linux_CentOS_RedHat/Lin ...

  2. IIS 无法打开页面,只能重启的问题

    最终解决方案: 要变通解决此问题,启用 EnableAggressiveMemoryUsage 注册表项在注册表中.当启用了 EnableAggressiveMemoryUsage 注册表项 Http ...

  3. JAVA文件中获取路径及WEB应用程序获取路径方法

    JAVA文件中获取路径及WEB应用程序获取路径方法 1. 基本概念的理解 `绝对路径`:你应用上的文件或目录在硬盘上真正的路径,如:URL.物理路径 例如: c:/xyz/test.txt代表了tes ...

  4. php整理(一):变量和字符串

    PHP中的变量: 1. 定义:$符号来定义变量 2. 说明: (1)PHP弱语言,定义变量的时候不用声明类型,但是并不代表PHP没有数据类型 (2)变量名是区分大小写的,只能是数字,字母或者下划线 ( ...

  5. drop.delete.trauncat的区别

    delete删除数据,保留表结构,可以回滚,如果数据量大,很慢,回滚是因为备份了删除的数据(删除数据时有两个动作,删除和备份) truncate删除所有数据,保留表结构,不可以回滚,一次全部删除所有数 ...

  6. HDU 4869 Turn the pokers (2014 Multi-University Training Contest 1)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  7. UVa 11992 (线段树 区间修改) Fast Matrix Operations

    比较综合的一道题目. 二维的线段树,支持区间的add和set操作,然后询问子矩阵的sum,min,max 写完这道题也是醉醉哒,代码仓库里还有一份代码就是在query的过程中也pushdown向下传递 ...

  8. this class is not key value coding-compliant for the key ##

    setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key ## 出现以上错误时很恶心,并 ...

  9. CentOS 5.6 netInstall可以的在线安装方式。

    之前百度google了一把, 发现原来的地址都失效了. 只找到一个能用的. 下载9M多的CentOS Net Install ISO文件,  选择安装方式时选HTTP. 然后在后面的 服务器位置处输入 ...

  10. QPS、PV和需要部署机器数量计算公式(转)

    术语说明: QPS = req/sec = 请求数/秒 [QPS计算PV和机器的方式] QPS统计方式 [一般使用 http_load 进行统计] QPS = 总请求数 / ( 进程总数 *   请求 ...