任意选一个或者两个球,使球上的数字之和小于等于k的方案数。 样例输入:10 87 5 1 3 8 9 10 2 11 6 样例输出:16

任意选一个或者两个球,使球上的数字之和小于等于k的方案数。EDz100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
样例输入:10 87 5 1 3 8 9 10 2 11 6EDz100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
样例输出:16EDz100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
算法一
  1. #include <bits/stdc++.h> 
  2. using namespace std; 
  3. int s[100010]; 
  4. int main() 
  5.     int m, n, x, i, j, sum; 
  6.     cin >> n; 
  7.     for(i = 1; i <= n; i++) 
  8.         cin >> s[i]; 
  9.     cin >> m; 
  10.     for(i = 1; i <= m; i++) 
  11.     { 
  12.         cin >> x; 
  13.         sum = 0; 
  14.         for(j = 1; j <= x; j++) 
  15.             sum = sum + s[j]; 
  16.         printf("%d", sum); 
  17.         if(i < m) 
  18.             printf(","); 
  19.     } 
  20.     return 0; 
算法优化
  1. #include<bits/stdc++.h> 
  2. using namespace std; 
  3. int a[1000010]; 
  4. int main() 
  5.     int i, n, k; 
  6.     scanf("%d%d", &n, &k); 
  7.     a[0] = 0; 
  8.     for(i = 1; i < n + 1; i++) 
  9.         scanf("%d", &a[i]); 
  10.     sort(a, a + n + 1); 
  11.     long long ans = 0; 
  12.     int L = 0; 
  13.     int R = n; 
  14.     while(L < R) 
  15.     { 
  16.         while(a[L] + a[R] > k && L < R) 
  17.             R--; 
  18.         if(L < R) 
  19.             ans = ans + (R - L); 
  20.         L++; 
  21.     } 
  22.     printf("%lld\n", ans); 
  23.     return 0; 

关 键 词

双指针

相关教程

提示声明

  • 免责声明:本站资源均来自网络或者用户投稿,仅供用于学习和交流:如有侵权联系删除!

猜你喜欢