A - 独木舟(贪心)
n个人,已知每个人体重。独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人。显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?
Input
第一行包含两个正整数n (0
Output
一行一个整数表示最少需要的独木舟数。
Sample Input
3 6
1
2
3
Sample Output
2
Solve:
贪心水题,每次只要拿最大的跟最小的组合比较就行了
Code:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 static const int MAXN = 1e4 + 10; 5 LL n , m; 6 LL data[MAXN] = {0}; 7 int main() 8 { 9 scanf("%lld%lld" , &n , &m); 10 for(int i = 0 ; i < n ; ++i) 11 scanf("%lld" , data + i); 12 sort(data , data + n); 13 int l = 0 , r = n - 1; 14 int ans = 0; 15 while(l <= r) 16 { 17 if(data[l] + data[r] <= m) 18 ++l; 19 --r , ++ans; 20 } 21 printf("%d\n" , ans); 22 }
B - 走格子(水题,模拟)
有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格子走出去。机器人有一个初始能量,每个格子对应一个整数A[i],表示这个格子的能量值。如果A[i] > 0,机器人走到这个格子能够获取A[i]个能量,如果A[i] < 0,走到这个格子需要消耗相应的能量,如果机器人的能量 < 0,就无法继续前进了。问机器人最少需要有多少初始能量,才能完成整个旅程。
例如:n = 5。{1,-2,-1,3,4} 最少需要2个初始能量,才能从1号走到5号格子。途中的能量变化如下3 1 0 3 7。
Input
第1行:1个数n,表示格子的数量。(1 <= n <= 50000) 第2 - n + 1行:每行1个数A[i],表示格子里的能量值(-1000000000 <= A[i] <= 1000000000)
Output
输出1个数,对应从1走到n最少需要多少初始能量。
Sample Input
5
1
-2
-1
3
4
Sample Output
2
Solve:
真水题,直接模拟就可以了
Code:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 int n; 5 int main() 6 { 7 scanf("%d" , &n); 8 LL oil = 0;LL ans = 0;LL x; 9 for(int i = 0 ; i < n ; ++i) 10 { 11 scanf("%lld" , &x); 12 oil += x; 13 if(oil < 0) 14 { 15 ans += (-oil); 16 oil = 0; 17 } 18 } 19 printf("%lld\n" , ans); 20 }
时间: 2024-11-10 07:28:42