10题AC6题,感觉自己简直渣渣Orz
1456 Problem A a x b (Ⅰ)
Description:
rt
Input:
本题有多组数据
每组数据有一行2个整数a, b(0<=a,b<=105), 由空格隔开
请处理到文件末尾
Output:
每组测试样例输出一行一个整数,表示a x b的结果
Sample Input:
2 3
4 5
Sample Output:
6
20
Official hint:
初入程序设计竞赛的您可能需要注意:
1.Wrang Answer?
可能爆int辣?
C/C++以及java中的int类型(32位有符号整数)能表示的范围为-2^31 ~ 2^31 - 1, 2^31约为2.147x10^9
unsigned int(32位无符号整数)表示的范围为0 ~ 2^32 - 1
您可能需要使用更大范围的类型,64位有符号整数,能表示到2^63 - 1, 约为9.233x10^18
C/C++为long long或__int64, 对应的格式控制符为%lld或%I64d(具体用哪个看测试平台,本oj请使用%lld)
java中为long
2.Time Limit Exceeded?
可能您并不知道如何处理文件末尾?
C可以利用scanf,gets等标准输入函数的返回值和EOF宏, 如while(scanf(“%d%d”, &a, &b) != EOF) { }
C++利用istream类>>运算符的返回值,如while(cin >> a >> b) { }
java可以利用Scanner类的hasNext方法3.Presentation Error?
请严格按照输出格式进行输出,不要有多余的提示性语句(如”请输入一个整数”、”a x b =”等),行末不要有多余的空格
Code Link:
Answer:
签到题,直接大整数过。
1457 Problem B 多关键字排序
Description:
现在你有一组二维向量(a1,b1),(a2,b2),…,(an,bn)
请以第一维为第一关键字,第二维为第二关键字,将这组序列升序排序
设排序好的序列为(c1,d1),(c2,d2),…,(cn,dn),则应该满足:
对于任意0<i<j<=n,有ci < cj 或 ci == cj && di <= dj
Input:
多组数据,第一行给出数据组数T(T<=10)
每组数据第一行有一个整数n(0<n<=105),表示这组向量的个数
第二行给出n个向量,每个向量的格式为(ai,bi),(0<=ai,bi <= 105),向量之间由一个空格隔开
Output:
对于每组数据,输出排序后的结果,格式与输入保持一致
Sample Input:
1
3
(2,3) (1,5) (2,1)
Sample Output:
(1,5) (2,1) (2,3)
Official hint:
您们上课学的什么选择排序,简单插入排序,冒泡排序的时间复杂度都是O(n2),太高辣!会超时的!请使用更加优(fu)雅(za)的排序算法…
Code Link:
Answer:
感谢重大的WMW菊苣指导,教我怎么用C++(几百年没用过真的忘了)
这道题的坑点首先是格式化输入,Java和C++解析输入很麻烦,最优的办法还是用scanf格式化输入:scanf(" (%d,%d)",&arr[i].first,&arr[i].second);
对于多了一个回车,可以用getchar()吸收,但是这道题多了一个空格。。。,所以在scanf中(%d,%d)
前面其实是有一个空格的Orz
直接用sort进行快排,手写cmp函数,完工w
1458 Problem C 全排列
http://oj.cqupt.edu.cn/JudgeOnline/problem.php?cid=1021&pid=2
Description:
我们知道,正整数1
n的排列方案数为排列数A(n,n) = n!n的所有排列方式
请按字典序输出1
Input:
多组数据
每组数据有一行一个整数n(0<n<10)
请处理到文件末尾
Output:
按字典序输出1~n的所有排列方案,一行一个方案
Sample Input:
3
Sample Output:
123
132
213
231
312
321
Official hint:
字典序的含义可以从样例中猜出…
Code Link:
Answer:
递归树desu
之前忘处理等于0的情况然后就wa了233
//太困了去睡个午觉先。。。有空再写
//继续继续<-这午觉睡得真tm长
1460 Problem E a x b (Ⅱ)
http://oj.cqupt.edu.cn/JudgeOnline/problem.php?cid=1021&pid=4
Description:
rt
Input:
本题有多组数据
每组数据有一行2个整数a, b(0<=a,b<=10^1000), 由空格隔开
请处理到文件末尾
Output:
每组测试样例输出一行一个整数,表示a x b的结果
Sample Input:
2 3
4 5
Sample Output:
6
20
Official hint:
Code Link:
Answer:
还是一如既往的大整数过题
1461 Problem F 数据结构
http://oj.cqupt.edu.cn/JudgeOnline/problem.php?cid=1021&pid=5
Description:
请实现一个”线性”数据结构,支持以下操作:
- push_front x 在序列头部插入一个元素x
- push_back x 在序列尾部插入一个元素x
- pop_front 弹出序列头部元素
- pop_back 弹出序列尾部元素
- reverse 反转整个序列
- max 查询整个序列的最大值
Input:
单组数据
第一行有一个整数n(0<n<=105),表示操作数
接下来的n行,每一行为一个操作指令(在1和2类型的操作中,x为109内的正整数)
Output:
对于操作类型3和4,输出弹出的元素
对于操作类型6,输出查询结果
对于异常操作(序列为空时进行弹出操作或查询操作),输出Error
Sample Input:
8
pop_back
push_front 1
max
push_front 2
max
reverse
pop_back
max
Sample Output:
Error
1
2
2
1
Official hint:
Operation List Answer
pop_back [] Error
push_front 1 [1]
max [1] 1
push_front 2 [2 1]
max [2 1] 2
reverse [1 2]
pop_back [1] 2
max [1] 1
Code Link:
Answer:
直接用LinkedList进行模拟,但是有几个注意的地方:
- 不需要真的去反转,标志一个反转标志,需要反转的时候把1,2和3,4操作反转一下就可以了(不然会超时)
- 同理,不需要每次
sort
,我是直接准备了一个临时变量max
来记录。。。 - 那么问题来了,如果
max
被pop()
出去了怎么办,所以我还准备了一个secondMax
。。。当然还有thirdMax
。。。 - 除了这种智障的方法之外,还有很多奇技淫巧,但是目前来看时间复杂度还是我这个最高,但是时间复杂度都堪忧
- 对于异常处理都是用的try-catch,然后输出
error
剩下的题都不会了Orz,本次题解就到此为止