16分菜鳥求指點
查看原帖
16分菜鳥求指點
1444229
SlienceMC楼主2024/12/7 16:56
#include <bits/stdc++.h>
using namespace std;
static int loop(int sum, vector<int> &options, int times);
static vector<int> erase(vector<int> data, int item);
static bool prime(int i);
int main() {
    int n, k;
    cin >> n >> k;
    vector<int> a(n);
    for (int i = n; i > 0; i--) cin >> a[i - 1];
    int t = 0;
    for (int i : a) {
        if (i % 2) {
            if (prime(loop(i, a, k))) t++;
        }
    }
    cout << t;
    return 0;
}
static int loop(int sum,vector<int> &options,int times) {
    if (times > 0) {
        for (int i : options) {
            vector<int> newV = erase(options,i);
            int a = loop(sum + i, newV, times - 1);
            if (a) {
                return sum + (a==1 && times==1 ? 0:a) + i;
            }
        }
    }
    return 1;
}
static vector<int> erase(vector<int> data, int item) {
	vector<int> result(data.size()-1);
	copy(data.begin(),data.begin()+distance(data.begin(),find(data.begin(),data.end(), item)), result.begin());
	copy(data.begin() + distance(data.begin(), find(data.begin(), data.end(), item))
		+ 1, data.end(), result.begin() + distance(data.begin(), find(data.begin(), data.end(), item)));
	return result;
}
static bool prime(int i) {
	if (i < 2) return 0;
	for (int n = 2; n < int(sqrt(i)); n++) {
		if (i % n == 0) return 0;
	}
	return 1;
}
2024/12/7 16:56
加载中...