目录
A. TubeTube Feed
题目描述
输入样例
5
5 9
1 5 7 6 6
3 4 7 1 9
4 4
4 3 3 2
1 2 3 4
5 7
5 5 5 5 5
2 1 3 9 7
4 33
54 71 69 96
42 24 99 1
2 179
55 66
77 88
输出样例
3 2 3 -1 2
代码
#include<iostream>
using namespace std;
int main()
{
int q; //测试样例的组数
cin >> q;
int i, j, n, t; //n提供的视频数量,t午饭秒数
for (i = 0; i < q; i++) {
cin >> n >> t;
int* a = new int[n+1]; //时间
int* b = new int[n+1]; //有趣度
int max = 0, index = -1;
//input
for (j = 1; j <= n; j++) {
cin >> a[j];
}
for (j = 1; j <= n; j++) {
cin >> b[j];
}
for (j = 1; j <= n; j++, t--) {
if (a[j] <= t && b[j] >= max) {
max = b[j];
index = j;
}
}
cout << index << endl;
delete[]a;
delete[]b;
}
return 0;
}
思路
定义变量,申请空间存放数据就不说了。
最终要输出有时间观看的最有趣的视频的索引(index)。
有条件的最值——找一定时间内最有趣的(需要遍历)
t--用来表示划走一个视频需要一秒。
调试过程
由样例可得,index是从1开始数的,所以存放数据的数组应该从j = 1开始到j = n 结束,同时申请空间时应该申请[n+1]个。
数据类型:都在int范围内,用int即可。
B. Karina and Array
题目描述
输入样例
7
4
5 0 2 1
3
-1 1 0
5
2 0 -1 -4 0
6
-8 4 3 7 1 -9
6
0 3 -2 5 -4 -4
2
1000000000 910000000
7
-1 -7 -2 -5 -4 -6 -3
输出样例
10
0
4
72
16
910000000000000000
42
代码
#include<iostream>
#include<algorithm>
using namespace std;
bool compare (int a,int b)
{
return a<b;
}
int main()
{
int t; //用例组数
cin>>t;
int i,j,n;
for(i = 0; i< t; i++){
cin>>n;
long long int *a = new long long int[n];
for(j = 0; j<n; j++){
cin>>a[j];
}
//排序
sort(a,a+n,compare);
long long int p = a[0]*a[1];
long long int q = a[n-1]*a[n-2];
cout<<(p>q?p:q)<<endl;
//cout<<p<<" "<<q<<endl;
delete []a;
}
return 0;
}
思路
最大的要么是最大的两个数相乘,要么是最小的两个数相乘(负负得正);
所以排序后取上述两个值中较大者即可。
排序:
#include<algorithm>
bool compare (int a,int b) //描述排序方法,此处为降序
{
return a<b;
}
int main()
{
···
sort(a,a+n,compare); //sort(start,end,排序方法)
//排序方法可不填,默认升序
···
return 0;
}
sort()函数更多用法可参考:http://t.csdn.cn/bI0pP
调试过程
数据类型要用long long int 数太大可能会超。
C. Bun Lover
题目描述
输入样例
4
4
5
6
179179179
输出样例
26
37
50
32105178545472401
代码
#include<iostream>
using namespace std;
int main()
{
int t;
cin >> t;
int i,j;
long long int n;
for (i = 0; i < t; i++) {
cin >> n;
long long int sum = 26;
if (n > 4) {
sum += n * (n + 1) - 24 + n;
}
cout << sum << endl;
}
return 0;
}
思路
观察可知,n = 4时,巧克力长sum = 26
由图可知,n = 5时,巧克力长度即增加2*5+1,以此类推。
调试过程
用循环依次加2*5+1,2*6+1,···,2*n+1太慢了,会超时。
不循环,直接数列求和,计算2*5+1,2*6+1,···,2*n+1依次相加,得n * (n + 1) - 24 + n,明显提高速度,减小时间复杂度。
总结
数据类型,看看超int了没。
结合输入输出样例去理解题目的意思。
优化代码,eg:循环改为数列求和直接得结果。
新:sort()函数排序:http://t.csdn.cn/bI0pP
VS真好用!!!