浙江大学PAT考试1009~1012(1010上帝是冠军。。)
哎,pat1010即使java书面,只有java书面,还增加了两个点,,。啊,智商捉佳,主要pat有些不给明确的范围。造成遐想空间。。
还是按顺序介绍。。
题目地址:http://pat.zju.edu.cn/contests/pat-a-practise
1009:
题目大意:模拟多项式相乘的。比方(5x^3+4x)*(4x^2+6)这种,直接用数组存储就好,反正最多1000+1000=2000项
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=2005; double a[maxn],b[maxn];
double ans[maxn]; int res1[maxn];
double res2[maxn]; int main()
{
int n,i,j; int x;
double ax;
while(cin>>n)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(ans,0,sizeof(ans));
for(i=0;i<n;i++)
{
cin>>x>>ax;
a[x]=ax;
}
cin>>n;
for(i=0;i<n;i++)
{
cin>>x>>ax;
b[x]=ax;
} for(i=0;i<=1000;i++)
{
for(j=0;j<=1000;j++)
{
ans[i+j]+=a[i]*b[j];
}
} int t=0;
for(i=2000;i>=0;i--)
{
if(fabs(ans[i])>=0.1)
{
t;
res1[t]=i;
res2[t++]=ans[i];
}
} cout<<t;
for(i=0;i<t;i++)
printf(" %d %.1f",res1[i],res2[i]);
cout<<endl;
}
return 0;
} /*
2 1 2.4 0 3.2
2 2 1.5 1 0.5
*/
1010:
题目大意:给你n1,n2,flag,p四个数字。假设flag是1的话。那么n1是p进制的数字,那么我们是否能找到一个数k。使得n2是k进制,使得n1(p)==n2(k),假设存在多个k,找最小的k,假设一个也不存在,那么直接输出Impossible,假设flag是2。我们须要找的是n2(p)==n1(k)。其它都一样。
解题思路:这个题目我WA了15次以上。。
最開始认为0-9。a-z最多不超过36进制,算了一下。用long long 写了一发。分数仅仅能拿12分/25分。到最后才想起来可能有这种数据:
zzzzzzzzz zzzzzzzzz 1 1000
然后把枚举进制的范围扩大到1000,发现能够拿24分了。可是发现再开大就会爆内存,后来想了一下,会有这种数据:
zzzzzzzzz zzzzzzzzz 1 10000000000
最后非常果断的选择了java的大数类和二分来找答案。
这题真的非常不easy。。。。
AC代码:
//package xixi;
import java.util.*; import java.math.*; public class Main {
public static void main(String args[])
{
String s1,s2,s3; BigInteger ans,ss,n;
int flag;
Scanner cin = new Scanner(System.in);
while(cin.hasNext())
{
s1=cin.next();
s2=cin.next();
flag=cin.nextInt();
n=cin.nextBigInteger();
if(flag==2)
{
s3=s1;
s1=s2;
s2=s3;
} int len=s1.length();
ans=BigInteger.ZERO;
for(int i=0; i<=len-1; i++)
{
int tmp;
if(s1.charAt(i)>='a'&&s1.charAt(i)<='z') tmp=s1.charAt(i)-'a'+10;
else tmp=s1.charAt(i)-'0';
ans=ans.multiply(n).add(BigInteger.valueOf(tmp));
} //System.out.println(ans);
BigInteger res=BigInteger.ZERO; int t;
len=s2.length(); String pp="100000000000000000000"; //10^20
BigInteger l,mid;
l=BigInteger.ONE;
BigInteger r=new BigInteger(pp); while(r.compareTo(l)>=0)
{
ss=BigInteger.ZERO; mid=l.add(r).divide(BigInteger.valueOf(2));
int fla=0;
for(int i=0; i<=len-1; i++)
{
int tmp;
if(s2.charAt(i)>='a'&&s2.charAt(i)<='z') tmp=s2.charAt(i)-'a'+10;
else tmp=s2.charAt(i)-'0'; if(BigInteger.valueOf(tmp).compareTo(mid)>=0)
{
fla=1;
break;
}
ss=ss.multiply(mid).add(BigInteger.valueOf(tmp));
} if(fla==1)
{
l=mid.add(BigInteger.ONE);
}
if(ss.compareTo(ans)==0)
{
res=mid;
r=mid.add(BigInteger.valueOf(-1));
}
else if(ss.compareTo(ans)>0)
{
r=mid.add(BigInteger.valueOf(-1));
}
else
{
l=mid.add(BigInteger.ONE);
}
} if(res.compareTo(BigInteger.ZERO)>0) System.out.println(res);
else System.out.println("Impossible");
} }
} /*
6 110 1 10
1 ab 1 2
110 6 1 2
zzzzzzzzz zzzzzzzzz 1 10000000000
*/
1011:
题目大意:20分的题目,直接看样例就能够了,找三行里面每行最大的数,然后标记。然后计算就能够了。
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
const double eps=1e-12; char mp[3]= {'W','T','L'};
char ans[3]; struct node
{
double x;
int index;
}nod[3]; int cmp(node p1,node p2)
{
if(p1.x>p2.x) return 1;
return 0;
} int main()
{
double res;
int i; while(cin>>nod[0].x>>nod[1].x>>nod[2].x)
{
int t=0;
res=1.0;
for(i=0; i<3; i++)
nod[i].index=i;
sort(nod,nod+3,cmp);
res=res*nod[0].x;
ans[t++]=mp[nod[0].index]; int xy=2;
while(xy--)
{
cin>>nod[0].x>>nod[1].x>>nod[2].x;
for(i=0; i<3; i++)
nod[i].index=i;
sort(nod,nod+3,cmp);
res=res*nod[0].x;
ans[t++]=mp[nod[0].index];
} res=(res*0.65-1)*2; double res1=res*100; /*cout<<res1<<endl;
if(res1-int(res1)>=0.5)
{
res1=res1+1;
}
res=res1/100.0;*/
printf("%c %c %c %.2f\n",ans[0],ans[1],ans[2],res+eps);
//不加这个eps硬是少一点。。 }
return 0;
} /*
1.1 2.5 1.7
1.2 3.0 1.6
4.1 1.2 1.1
*/
1012:
题目大意:给一个班全部学生的成绩,包含C。M。E三种成绩。当然我们能够算出他的A成绩,然后我们每次依据学号来查询一个人的成绩排名,四种成绩会有四种排名。我们须要最靠前的排名,假设有同样的。依照A
> C > M > E的顺序就可以。
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<map>
#define ll long long
using namespace std;
const int maxn=2005; map<string,int> mp;
struct node
{
double a;
double c;
double m;
double e;
}nod[maxn]; int main()
{
int n,m,i,j; while(cin>>n>>m)
{
string s;
double mc,mm,me;
for(i=1;i<=n;i++)
{
cin>>s>>mc>>mm>>me;
nod[i].a=(mc+mm+me)/3.0;
nod[i].c=mc,nod[i].e=me,nod[i].m=mm;
mp[s]=i;
} for(i=0;i<m;i++)
{
int rank1=n+1;
char res;
cin>>s;
if(!mp[s])
{
puts("N/A");
continue;
} //原谅我把一段代码复制了四遍。。。
double tmp=nod[mp[s]].a; //A
int cnt=1;
for(j=1;j<=n;j++)
{
//cout<<nod[j].a<<endl;
if(nod[j].a>tmp)
cnt++;
}
if(cnt<rank1)
{
rank1=cnt;
res='A';
} //cout<<rank1<<endl; tmp=nod[mp[s]].c; //C
cnt=1;
for(j=1;j<=n;j++)
{
if(nod[j].c>tmp)
cnt++;
}
if(cnt<rank1)
{
rank1=cnt;
res='C';
} tmp=nod[mp[s]].m; //M
cnt=1;
for(j=1;j<=n;j++)
{
if(nod[j].m>tmp)
cnt++;
}
if(cnt<rank1)
{
rank1=cnt;
res='M';
} tmp=nod[mp[s]].e; //E
cnt=1;
for(j=1;j<=n;j++)
{
if(nod[j].e>tmp)
cnt++;
}
if(cnt<rank1)
{
rank1=cnt;
res='E';
} printf("%d %c\n",rank1,res);
}
}
return 0;
} /*
5 6
310101 98 85 88
310102 70 95 88
310103 82 87 94
310104 91 91 91
310105 85 90 90
310101
310102
310103
310104
310105
999999
*/
世界杯今日开战。mark一下。!
版权声明:本文博客原创文章,博客,未经同意,不得转载。
浙江大学PAT考试1009~1012(1010上帝是冠军。。)的更多相关文章
- 浙江大学PAT考试1069~1072(2013-11-2)
11 题目地址:http://pat.zju.edu.cn/contests/pat-a-practise 1069: 由下降序和上升序两个四位数不断相减,然后得到新数据,始终会到达一个数字终止. 递 ...
- PAT 乙级 1009
题目 题目地址:PAT 乙级 1009 题解 本题本身属于比较简单的字符串操作题,但是因为对于string的操作和函数不熟悉导致本题做起来很费劲,需要加强对于string类以及相关方法的理解和熟练程度 ...
- PAT——甲级1009:Product of Polynomials;乙级1041:考试座位号;乙级1004:成绩排名
题目 1009 Product of Polynomials (25 point(s)) This time, you are supposed to find A×B where A and B a ...
- PAT乙级 1009. 说反话 (20)
1009. 说反话 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一句英语,要求你编写程序,将句中 ...
- 【PAT】1009. Product of Polynomials (25)
题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1009 分析:简单题.相乘时指数相加,系数相乘即可,输出时按指数从高到低的顺序.注意点:多项式相 ...
- 浙江大学PAT上机题解析之5-05. QQ帐户的申请与登陆
实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式说明: 输入首先给出一个正整数N(<=105),随后给出N行指令.每行指令的格式为:“命令符 ...
- [C++]PAT乙级1009. 说反话 (17/20)
/* 1009. 说反话 (20) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例, 在一行内给出总长度不超过80的字符串. 字符串由若干单词和若干 ...
- PAT Basic 1009
1009 说反话 (20 分) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格 ...
- PAT 乙级 1009 说反话 (20) C++版
1009. 说反话 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一句英语,要求你编写程序,将句中 ...
随机推荐
- Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结
Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合. REGEXP_SUBSTR函数格 ...
- CI-持续集成(2)-软件工业“流水线”技术实现(转)
1 概述 持续集成(Continuous Integration)是一种软件开发实践.在本系列文章的前一章节已经对其背景及理论体系进行了介绍.本小节则承接前面提出的理论构想进行具体的技术实现. & ...
- newlisp 接受jenkins带空格的参数
jenkins有一个参数text种类,它能够以文本的段落拷贝作为参数 newlispThe program receives parameters are separated by spaces, 更 ...
- UVA 239 - Tempus et mobilius. Time and motion(更换周期)
UVA 239 - Tempus et mobilius. Time and motion 题目链接 题意:这题题意也是吊得飞起,看了老半天,大概是这样: 有一个放球的队列.和3个轨道(说白了就是栈) ...
- T-SQL问题解决集锦——数据加解密
原文:T-SQL问题解决集锦--数据加解密 以下代码已经在SQLServer2008上的示例数据库测试通过 问题一:如何为数据进行加密与解密,避免使用者窃取机密数据? 对于一些敏感数据,如密码.卡号, ...
- Java使用串行编程操作继电器
首先,我们必须建立一个良好的环境,那是,jdk并且tomcat.如果它不必须是web装了! 还有就是配置,也就是默认的comm.jar ,javax.comm.properties , win32co ...
- poj 2689 巧妙地运用素数筛选
称号: 给出一个区间[L,R]求在该区间内的素数最短,最长距离. (R < 2 * 10^9 , R - L <= 10 ^ 6) 由数论知识可得一个数的因子可在开根号内得到. 所以,我们 ...
- CSDN博客ByeBye
情绪csdn定制博客博客是不够的,没有足够的光.对于我这种极简的人,不合适. 我们不打算更新的博客. 至http://blog.edagarli.com/ 版权声明:本文博主原创文章.博客,未经同意不 ...
- 创建线程的两种方式:继承Thread类和实现Runnable接口
第一种方式:继承Thread类 步骤:1.定义类继承Thread 2.覆写Threa类的run方法. 自定义代码放在run方法中,让线程运行 3.调用线程的star方法, 该线程有两个作用:启动线程, ...
- SQL Server 备份和还原全攻略
原文:SQL Server 备份和还原全攻略 一.知识点 完全备份: 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件.(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份, ...