NC213932. 抽签游戏
描述
输入描述
第一行有一个数n 代表卡片数量 1<n<50 第二行有一个数M,M的意义如题 1<m<1000 第三行有n个数,代表n张卡片上面所写的数值 1<每个数字<1000
输出描述
如果抽四次可以满足上述条件 输出 YES 否则输出 NO
示例1
输入:
5 10 1 2 3 4 5
输出:
YES
说明:
Java(javac 1.8) 解法, 执行用时: 29ms, 内存消耗: 12252K, 提交时间: 2021-01-26 23:11:07
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int m = scanner.nextInt(); int k[] = new int[n]; for (int i = 0; i < n; i++) { k[i] = scanner.nextInt(); } int []k12 = new int [n*(n + 1)/2]; int index = 0; for (int i = 0; i < k.length; i++) { for (int j = i; j < k.length; j++) { k12[index] = k[i] + k[j]; index++; } } int []k14 = new int [n*(n + 1)*(n*n + n + 2)/8]; index = 0; for (int i = 0; i < k12.length; i++) { for (int j = i; j < k12.length; j++) { k14[index] = k12[i] + k12[j]; index++; } } Arrays.sort(k14); int low = 0; int hight = k14.length; while (low <= hight) { int mid = (low + hight) / 2; if (k14[mid] == m) { System.out.println("YES"); return; }else if (m > k14[mid]) { low = mid + 1; }else { hight = mid - 1; } } System.out.println("NO"); } }
C(clang11) 解法, 执行用时: 2ms, 内存消耗: 376K, 提交时间: 2020-11-24 22:04:33
#include<stdio.h> int main() { int n,m,a[50];int k=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int j=1;j<=n;j++){ for(int i=1;i<=n;i++){ for(int s=1;s<=n;s++){ for(int t=1;t<=n;t++){ if(a[i]+a[j]+a[s]+a[t]==m) k=1; } } } } if(k) printf("YES"); else printf("NO"); return 0; }
C++(clang++11) 解法, 执行用时: 3ms, 内存消耗: 384K, 提交时间: 2020-12-02 13:37:53
#include<bits/stdc++.h> using namespace std; int main() { int a[107],n,k,i,x1,x2,x3,x4,ans=0; cin>>n; cin>>k; for(i=0;i<n;i++) cin>>a[i]; for(x1=0;x1<n;x1++) { for(x2=0;x2<n;x2++) { for(x3=0;x3<n;x3++) { for(x4=0;x4<n;x4++) { if(a[x1]+a[x2]+a[x3]+a[x4]==k) ans=1; } } } } if(ans) cout<<"YES"<<endl; else cout<<"NO"<<endl; return 0; }
Python3(3.9) 解法, 执行用时: 19ms, 内存消耗: 2680K, 提交时间: 2020-11-24 13:28:03
import itertools k = 0 n = int(input()) m = int(input()) array = [int(st) for st in input().split(' ')] for lst in itertools.combinations_with_replacement(array, 4): if sum(lst) == m: k = k + 1 if k == 1: print('YES') if k == 0: print('NO')