1 /*
 2 *  排序+二分 
 3 */
 4 
 5 #include <stdio.h>
 6 #include <stdlib.h>
 7 #define N 501
 8 
 9 int a[N], b[N*N], c[N];
10 
11 int cmp(const void *a, const void *b) {
12     return *(int *)a - *(int *)b;
13 }
14 
15 int main() {
16     int l, n, m, s, i, j, k, tmp, tmpp, left, right, mid, flag, cas = 0;
17     while (scanf("%d%d%d", &l, &n, &m) != EOF) {
18         for (i=0; i<l; ++i) scanf ("%d", &a[i]);
19         for (k=-1,i=0; i<n; ++i) {
20             scanf ("%d", &tmp);
21             for (j=0; j<l; ++j) b[++k] = tmp + a[j];  
22         }
23         for (i=0; i<m; ++i) scanf ("%d", &c[i]);
24         qsort(b, k+1, sizeof(int), cmp);
25         scanf ("%d", &s);
26         printf ("Case %d:\n", ++cas);
27         while (s--) {
28             scanf ("%d", &tmpp);
29 //            if (tmpp-c[0]<b[0] || tmpp-c[m-1]>b[k]) {puts("NO"); continue;} 
30             flag = 0;
31             for (i=0; i<m; ++i) {
32                 tmp = tmpp - c[i];
33                 left = 0;
34                 right = k;
35                 while (left <= right) {
36                     mid = (left + right) >> 1;
37                     if (tmp == b[mid]) { flag = 1; break;}
38                     else if (tmp < b[mid]) right = mid - 1;
39                     else left = mid + 1;
40                 }
41                 if (flag) break;
42             }
43             if (flag) puts("YES");
44             else puts("NO");
45         }
46     }
47     return 0;
48 }

 

相关文章:

  • 2021-08-08
  • 2021-10-29
  • 2021-07-09
  • 2022-03-07
  • 2022-02-10
  • 2021-12-23
  • 2022-12-23
  • 2021-07-25
猜你喜欢
  • 2022-12-23
  • 2021-09-19
  • 2022-01-06
  • 2021-10-15
  • 2021-10-10
  • 2022-12-23
  • 2021-10-21
相关资源
相似解决方案